Tout d'abord, examinons les deux exemples suivants :
Exemple 1 :
//包A中有一个动物类 package testa; public class Animal { protected void crowl(String c){ System.out.println(c); } }
(Tutoriel vidéo recommandé : java Video)
Exemple 2 :
package testb; import testa.Animal; class Cat extends Animal { } public class Rat extends Animal{ public void crowl(){ this.crowl("zhi zhi"); //没有问题,继承了Animal中的protected方法——crowl(String) Animal ani=new Animal(); ani.crowl("animail jiaojiao"); //wrong, The method crowl(String) from the type Animal is not visible Cat cat=new Cat(); cat.crowl("miao miao"); //wrong, The method crowl(String) from the type Animal is not visible } }
Puisque les chats et les souris héritent de la classe animale, alors dans le cadre de la classe souris, l'héritage du chat ne peut pas être vu. Qu'en est-il de la méthode Crow() ?
Questions et réponses :
Les règles de protection des accès protégés sont très subtiles. Bien que le domaine protégé soit visible par toutes les sous-classes. Mais une chose est très importante. Lorsque sont dans des packages différents, les sous-classes ne peuvent accéder qu'au domaine protégé de la classe parent dont elles héritent dans leur propre portée, mais ne peuvent pas accéder aux autres sous-classes (avec le même parent). ). Le domaine protégé hérité par le frère biologique de la classe) et le domaine protégé ani.crow1() de l'objet de classe parent. Pour parler franchement : les souris ne peuvent qu'appeler "zhi, zhi". Même s’il peut voir le chat (il peut créer un objet chat dans son propre champ d’application), il n’apprendra jamais à miauler.
En d'autres termes, la méthode Crowl héritée de cat est visible dans le cadre de la classe cat. Mais cela n’est pas visible dans le cadre de la classe rat, même si rat et chat sont frères.
De plus : c'est pourquoi nous ne pouvons pas simplement cloner directement l'objet aObject.clone() lorsque nous utilisons la méthode clone. Il doit être dans aObject.bObject=(Bobject)this.bObject.clone();
Résumé :
Lorsque B étend A, dans le cadre de la sous-classe B, il ne peut qu'appeler la méthode protégée de l'objet défini par cette sous-classe B (cette méthode est héritée de la classe parent A). Les méthodes protégées des autres objets de la classe A (A lui-même et hérité de A) ne peuvent pas être appelées.
Tutoriel recommandé : Programme d'entrée 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!