Pourquoi la sous-classe d'un autre paquet ne peut pas accéder à une méthode protégée?
J'ai deux classes de deux forfaits différents:
package package1;
public class Class1 {
public void tryMePublic() {
}
protected void tryMeProtected() {
}
}
package package2;
import package1.Class1;
public class Class2 extends Class1 {
doNow() {
Class1 c = new Class1();
c.tryMeProtected(); //ERROR: tryMeProtected() has protected access in Class1
tryMeProtected(); //No error
}
}
Je peux comprendre pourquoi il n'y a pas d'erreur dans l'appel de tryMeProtected()
depuis Class2
voit cette méthode car il hérite d' Class1
.
Mais pourquoi n'est-il pas possible pour un objet de Class2
pour accéder à cette méthode sur un objet de Class1
à l'aide de c.tryMeProtected();
?
source d'informationauteur user2986848
Vous devez vous connecter pour publier un commentaire.
Protégé méthodes ne peuvent être accessibles par le biais de l'héritage dans les sous-classes à l'extérieur du colis. Et donc la deuxième approche
tryMeProtected();
œuvres.Le code ci-dessous l'habitude de compiler, car nous ne sommes pas à l'appel de la version héritée de la méthode protégée.
Suivre cette stackoverflow lien pour plus d'explication.
Je crois que vous ne comprenez pas la différence entre
package
etprotected
visibilité.tryMePublic
sera accessible où que vous soyez.tryMeProtected
seront accessibles à tous sous-classe ET de chaque classe du même package.tryMePackage
sera accessible à toutes les classes du même package (non disponible dans la classe des enfants si il y a un paquet différent)Enfants de la classe du même package
Classe des enfants dans les différentes
Vous utiliser deux forfaits différents, et vous n'avez pas accès à votre parent des attributs par succession directe, mais par un intermédiaire parent instance a déclaré dans la classe enfant (similaire à la composition). => c'est pas la façon
protected
œuvres.Seulement l'héritage direct permet aux protégés du parent des attributs pour l'atteindre.
Ainsi, vous pouvez le faire:
mais jamais d':
En effet, c'est une particularité de
protected
mot-clé qui est souvent mal compris.Comme par Java Protégé modificateur d'Accès définition des méthodes qui sont déclarées protégées dans une super-classe ne peuvent être consultées que par les sous-classes dans d'autres ou de toute classe dans le package de la protection des membres de la classe.
vous ne pouvez pas accès protégé par la méthode de création d'un objet de la classe.
Donc, pour l'accès Protégé méthode, vous devez étendre la super-classe.(c'est ce qui explique votre 2ème appel est correct)
Elle peut être obtenue de deux manières
1. Soit en faisant un objet de la classe Enfant puis en accédant à la méthode protégée de la classe Parent.
PAQUET 1
PACKAGE2
2. Ou en appelant directement la méthode de la classe fille
eg tryMeProtected();