是否真的有必要将所有方法实现到子类(继承自抽象类),如果该抽象类的另一个子类已经实现了那些抽象方法?
abstract class A {
abstract void method();
abstract void anothermethod();
}
class B extends A {
void method() {}
void anothermethod() {}
}
class C extends A { // is this class definition is legal?
void sample() {}
}
答案 0 :(得分:3)
仅当您将C标记为抽象类时。因此将其实现职责传递给它的子类。
另一种选择是使C扩展B,因此B将包含其子类要求A的实现。
答案 1 :(得分:2)
不,这不合法。你有一个具体类(C
未被声明为抽象)扩展抽象类,但没有提供其方法的实现。你不清楚为什么你认为这个 或 可以合法 - 你应该考虑这是否会对你对继承的理解产生更广泛的影响,而不仅仅是这个具体案例。
C
与B
完全分开。它们可能具有完全不同的状态 - 例如,B可能使用仅存在于method()
实例中的某个状态来实现B
。重要的是要了解C
的实例不是 B
的实例。
如果您希望它继承其行为,您应该C
子类B
而不是A
。
答案 2 :(得分:0)
没有。在这种情况下,C类也是抽象的。
class C extends B
怎么样?
答案 3 :(得分:0)
这绝对是非法的,除非你把类“C”抽象为IronBlossom建议或实现类“C”中类“A”的所有抽象方法。