假设我有两个类,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 method
This is Class A's method
问题:
@Override
关键字的目的是什么,因为如果我省略它,它仍然有效。- 如果我不实现抽象方法,就会出现编译错误。那么和实现接口有什么区别呢?
- 另外,我也可以
method2()
在 B 中实现。然后输出变成了 B 中使用的内容。这不是也覆盖了父类方法吗?那么在A类中显式定义一个方法为抽象的目的是什么?
@Override
不是关键字,它是一个可选的注释,可帮助编译器检查您是否确实覆盖了一个方法。如果你说@Override
但没有方法可以覆盖,编译器会告诉你你可能打错了。重命名method1
以method12
查看效果。