/ / Pourquoi nous n'avons accès qu'aux méthodes de classe A. Pourquoi les méthodes de substitution ne peuvent pas être plus restrictives? [fermé] - java, oop

Pourquoi avons-nous accès aux méthodes de classe A uniquement? Pourquoi les méthodes de substitution ne peuvent-elles pas être plus restrictives? [fermé] - java, oop

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 № 1

B "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.