一个抽象类(超类),两个子类,一个子类中的一个实现。这合法吗?

时间:2011-10-27 11:10:18

标签: java

是否真的有必要将所有方法实现到子类(继承自抽象类),如果该抽象类的另一个子类已经实现了那些抽象方法?

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() {}    
}

4 个答案:

答案 0 :(得分:3)

仅当您将C标记为抽象类时。因此将其实现职责传递给它的子类。

另一种选择是使C扩展B,因此B将包含其子类要求A的实现。

答案 1 :(得分:2)

不,这不合法。你有一个具体类(C未被声明为抽象)扩展抽象类,但没有提供其方法的实现。你不清楚为什么你认为这个 可以合法 - 你应该考虑这是否会对你对继承的理解产生更广泛的影响,而不仅仅是这个具体案例。

CB完全分开。它们可能具有完全不同的状态 - 例如,B可能使用仅存在于method()实例中的某个状态来实现B。重要的是要了解C的实例不是 B的实例。

如果您希望它继承其行为,您应该C子类B而不是A

答案 2 :(得分:0)

没有。在这种情况下,C类也是抽象的。

class C extends B怎么样?

答案 3 :(得分:0)

这绝对是非法的,除非你把类“C”抽象为IronBlossom建议或实现类“C”中类“A”的所有抽象方法。