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

class B extends A 
{ 
} 

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

Est-ce que C's Foo() remplace les A même si B ne l'a pas surchargé? Ou dois-je ajouter un bout dans B qui appelle la méthode du super pour chacun que je veux remplacer en C?Substitution d'une méthode dans la superclasse de superclasse dans Java?

+1

Oui cela annulera l'implémentation de A pour les instances si C seulement. Les instances de A et B utiliseront A.Foo(). – dsmith

Répondre

6

Même si B ne l'a pas mentionné, Foo devrait toujours être disponible pour cause d'héritage. Par extension, alors, Foo est également disponible pour la sous-classe C et devrait pouvoir être remplacé grâce au polymorphisme.

Par conséquent, les instances de C utiliseront c.foo() (cependant il est défini), où les instances de A et B utiliseront a.foo() car elles n'ont pas encore été remplacées.

+0

Vraisemblablement alors: A a = new C(); a.Foo(); appellera C.Foo()? –

+1

Euh, oui, mais c'est une convention de nommage plutôt confuse pour vos variables. – Andy

0

Oui C Foo emporte() de A.

Cela est dû à l'héritage, bien que B ne remplace pas Foo(), Foo() est héritée de A par B.

Et comme C étend B, Foo() est hérité par C et le dépassement se produit lorsque C définit Foo().

Questions connexes