了解Java中抽象类的目的
假设我有两个类,A和B。A类定义为抽象类,而B扩展了这个抽象类,最后我测试了结果,两个类都属于同一包。
public abstract class A { protected abstract void method1();
protected void method2() {
System.out.println("This is Class A's method");
}
}
public class B extends A {
@Override
protected void method1() {
System.out.println("This is B's implementaiton of A's method");
}
}
现在,当我测试它们时:
B b = new B();b.method1();
b.method2();
我得到预期的输出:
This is B's implementaiton of A's methodThis is Class A's method
@Override
关键字的目的是什么,因为如果我省略它,它仍然可以正常工作。- 如果我没有实现抽象方法,则会出现编译错误。那么与实现接口有什么区别?
- 另外,我也可以
method2()
在B中实现。然后输出更改为B中的用法。这是否还会覆盖父类方法?那么在A类中将方法显式定义为 抽象 的目的是什么?
回答:
@Override在Java 5中引入(在Java 6中进行了扩展)。这只是提供信息。它说:“我想重写父类或接口中已经存在的内容。
IDE就像Eclipse可以在没有此类父方法的情况下警告您(例如,如果您拼写错误的名称)。在那种情况下,您的方法将不会被调用(因为拼写错误)。
但是,不必对此太担心。
抽象类允许您定义基本功能,而未定义的部分将保留。接口不允许您执行任何操作。您可以对所有情况进行编程,除了在每种情况下真正改变的部分。因此,在需要时,您可以继承并实现缺少的部分。
是。在Java中,您可以覆盖所有未在父类中显式声明为final的方法。没关系。如果要使其不可修改,则可以将其声明为final。例如,如果要声明订单,则可以:
public abstract class Ordering<X>{
abstract boolean isLower(X a, X b);
abstract boolean isEquals(X a, X b);
final boolean isGreater(X a, X b) {
return !isLower(a, b) && !isEquals(a, b);
}
}
当然,覆盖isGreater以另一种更有效的方式实现它可能是有道理的(想象一下比较起来会很昂贵)。但是在某些情况下,您想提供基本的已经实现的功能(然后是抽象类比接口更好的情况),或者想要强制执行某些实现(然后,当final关键字显示有用时)。
以上是 了解Java中抽象类的目的 的全部内容, 来源链接: utcz.com/qa/405634.html