per citare un precedente risposta "Si puo' t - perché romperebbe l'incapsulamento. " a cui vorrei aggiungere che:
Tuttavia esiste un caso in cui è possibile, vale a dire se il metodo è static
(public
o protected
). Non puoi overwrite the static method.
Avere un metodo public static
è banale per dimostrare che si può effettivamente fare questo.
Per protected
tuttavia, è necessario all'interno di uno dei propri metodi eseguire un cast su qualsiasi superclasse nel percorso di ereditarietà e il metodo della superclasse verrà chiamato.
Questo è il caso angolo sto esplorando nella mia risposta:
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 risposta rimane No, ma volevo solo mostrare un caso in cui è possibile, anche se probabilmente non avrebbe alcun senso e è solo un esercizio.
fonte
2016-02-19 21:39:57
Solo perché qualcuno dovrebbe chiedere, perché C estende B se sembra che voglia estendere A direttamente? (Immagino ci siano altre parti su cui stai facendo affidamento sulle funzionalità di B, o qualcosa del genere) –
A foo() può essere chiamato da C usando super.foo() solo se B non sovrascrive il comando A foo(). – YoK
_Efficace Java 2nd Edition, elemento 16: composizione preferita su ereditarietà_. Inoltre, controlla lo schema del decoratore; potrebbe adattarsi meglio alle tue esigenze. – polygenelubricants