Il existe un problème qui est facilement négligé en Java, à savoir la relation entre les autorisations des classes héritées et les autorisations des classes de base. Parce que lorsque vous utilisez des classes héritées, vous aurez rarement besoin de modifier le caractère de contrôle d'accès de la classe de base, mais d'utiliser directement le caractère de contrôle d'accès de la classe de base.
Si la classe de base a une méthode d'attribut qui est privée, la sous-classe peut-elle être modifiée en protégée ? Si elle est protégée, la sous-classe peut-elle être modifiée en publique ou privée ? Examinons ensuite ce problème.
Tutoriels vidéo associés recommandés : Vidéo d'enseignement Java
1 La méthode de classe de base est privée
Tout d'abord, si la classe de base La méthode d'attribut est privée, la sous-classe peut-elle donc être modifiée en protégée ou publique ? La réponse est non. Cette réponse peut être conclue avec un petit raisonnement. Puisque la méthode d'attribut de la classe de base est privée, elle n'est pas visible par la sous-classe, comment les autorisations de la méthode de la classe de base peuvent-elles être utilisées. être modifié ? Qu'en est-il du symbole de contrôle ?
Nous pouvons utiliser un morceau de code pour vérifier ce problème :
/*BaseClass.java*/ public class BaseClass { private void test() {} } /*ExtendClass.java*/ public class ExtendClass extends BaseClass { //@Override protected void test() {} }
Si le code ci-dessus supprime l'annotation, une erreur sera signalée, indiquant que la méthode est introuvable, car la méthode de la classe de base est private , il n'y aura aucun problème si vous supprimez l'annotation, mais pour le moment, la méthode test() de la sous-classe et la méthode test() de la classe de base sont deux méthodes totalement indépendantes.
2. La méthode de la classe de base est conviviale
Si la méthode de la classe de base est conviviale, ce qui est l'autorisation par défaut, alors il y a deux situations, l'une est l'enfant La classe et la classe de base sont dans le même package. La première est que la sous-classe et la classe de base ne sont pas dans le même package. Lorsque la sous-classe et la classe de base sont dans le même package, le symbole de contrôle d'autorisation peut être étendu en protected ou public :
/*BaseClass.java*/ package demo1; public class BaseClass { void test() {} } /*ExtendClass.java*/ package demo1; public class ExtendClass extends BaseClass { @Override protected void test() {} }
Les deux classes ci-dessus sont sous le package demo1 et le code peut être utilisé correctement. Mais lorsque la sous-classe et la classe de base ne sont pas dans le même package, la situation est différente :
/*BaseClass.java*/ package demo2.demo1; public class BaseClass { void test() {} } /*ExtendClass.java*/ package demo2; public class ExtendClass extends BaseClass { //@Override protected void test() {} }
Si la sous-classe et la classe de base ne sont pas dans le même package, alors les autorisations par défaut ne peuvent pas être étendues. la raison est en fait la même que privée. La classe ne peut pas voir les méthodes de la classe de base et ne peut donc pas étendre les autorisations de la méthode.
3. La méthode de la classe de base est protégée
Si la méthode de la classe de base est protégée, alors la sous-classe peut étendre le caractère de contrôle d'accès au public :
/*BaseClass.java*/ package demo2.demo1; public class BaseClass { protected void test() {} } /*ExtendClass.java*/ package demo2; public class ExtendClass extends BaseClass { @Override public void test() {} }
4.Résumé
En fait, il est facile de comprendre l'extension. Rappelez-vous la directive suivante : Théoriquement, les sous-classes sont des caractères de contrôle d'accès qui peuvent étendre la classe de base. mais le caractère de contrôle d'accès de la classe de base ne peut pas être restreint et il ne peut être étendu que lorsque la sous-classe peut voir la méthode de la classe de base.
Si vous souhaitez en savoir plus sur les didacticiels connexes, vous pouvez visiter : Premiers pas avec les bases de Java
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!