Pour citer une réponse précédente « Vous pouvez » t - parce que cela briserait l'encapsulation. " à laquelle je voudrais ajouter que:
Cependant, il existe un cas de coin où vous pouvez, à savoir si la méthode est static
(public
ou protected
). Vous ne pouvez pas overwrite the static method. Avoir une méthode public static
est trivial pour prouver que vous pouvez en effet le faire. Pour protected
protected
protected
Cependant, vous avez besoin de l'intérieur de l'une de vos méthodes pour effectuer une conversion à n'importe quelle super-classe dans le chemin d'héritage et cette méthode de super-classe serait appelée.
Tel est le cas de coin j'explore dans ma réponse:
public class A {
static protected callMe(){
System.out.println("A");
}
}
public class B extends A {
static protected callMe(){
System.out.println("B");
}
}
public class C extends B {
static protected callMe(){
System.out.println("C");
C.callMe();
}
public void accessMyParents(){
A a = (A) this;
a.callMe(); //calling beyond super class
}
}
La réponse reste encore Non, mais je voulais juste montrer un cas où vous pouvez, bien qu'il ne serait probablement pas de sens et est juste un exercice.
Juste parce que quelqu'un devrait demander, pourquoi C étend B si vous semblez vouloir étendre A directement? (J'imagine qu'il y a d'autres parties pour lesquelles vous comptez sur la fonctionnalité de B) –
A foo() peut être appelé depuis C en utilisant super.foo() seulement si B ne remplace pas foo() de A. – YoK
_Effective Java 2e édition, article 16: Favoriser la composition sur l'héritage_. En outre, consultez le motif décorateur; cela peut mieux convenir à votre besoin. – polygenelubricants