假设我有两个类,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中使用的东西,这不是也重写了父类方法吗?那么显式定义一个方法的目的是什么呢?abstract在A类?
-
@Override
不是关键字,它是可选的注解这有助于编译器检查您是否确实覆盖了一个方法。如果你说@Override
但没有方法可以覆盖,编译器会告诉你,你可能犯了一个拼写错误。改名method1
to method12
看看效果。
- 接口不能有任何实现,而抽象类可以选择为其某些方法提供实现。此外,接口不能有数据成员。
- 将方法定义为抽象方法意味着派生类must提供一个实现。不声明它抽象表示派生类只是can提供自己的实现,但他们不需要。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)