class A{
public void m1(){}
public void m2(){}
}
class B{
public void m3(){}
public void m1(){}
public static void main(String args[]){
A a=new B();
a.m1();
//Why we have access to A class methods only.
// Why overriding methods cannot be more restrictive
}
}
Réponses:
0 pour la réponse № 1B
"est un" A
, vous pouvez donc passer un B
à une méthode comme doSomethingToA(A a)
. La méthode s'attend à juste titre à pouvoir voir m1
et m2
.
Vous n'avez accès qu'à A
méthodes parce que le type d'un est A
- ce pourrait être un A
et pas un B
, vous ne pouvez donc appeler que les méthodes exposées par la classe de variables. Vous pouvez changer le principal pour être B a=new B();
et maintenant vous pouvez appeler les méthodes B.
0 pour la réponse № 2
a est défini comme type A, donc a.m1 (), utilise la méthode m1 () de A.
Vous pouvez étendre A avec B, puis votre code appellera m1 depuis B.
0 pour la réponse № 3
La substitution peut être possible lorsque vous étendez une classe ou implémentez une interface. c'est-à-dire que la substitution peut être applicable lorsque nous parlons d'interfaces et d'héritage.
Dans votre code, vous redéfinissez la méthode qui ne remplace pas.
Seules les méthodes héritées peuvent être remplacées, et rappelez-vous que private les méthodes ne sont pas héritées.