2010-09-04 49 views
1
class A 
{ 
    public void Foo() {} 
} 

class B extends A 
{ 
} 

class C extends B 
{ 
    public void Foo() {} 
} 

即使B没有覆盖它,C的Foo()是否会覆盖A的?或者我必须在B中添加一个存根,为每个我想在C中重写的方法调用super的方法?覆盖java中超类'超类的方法?

+1

是的,如果只有C,这将覆盖A的实现实例。 A和B的实例将使用A.Foo()。 – dsmith 2010-09-04 15:55:53

回答

6

尽管B没有提及它,Foo仍然应该由于继承而可用。通过扩展,然后,Foo也可用于子类C,并且应该能够由于多态性而被覆盖。

因此,C的实例将使用c.foo()(但已定义),其中A和B的实例将使用a.foo(),因为它们尚未被覆盖。

+0

假定然后:A a = new C(); a.Foo();将调用C.Foo()? – 2010-09-04 22:08:25

+1

嗯,是的,但这是一个相当混乱的变量命名约定。 – Andy 2010-09-05 01:50:05

0

是c覆盖A的富()

这是由于继承,虽然B不重写的Foo(),美孚()由B.

而作为C来自A被继承扩展B,Foo()被C继承,并且覆盖发生在C​​定义Foo()时。

相关问题