如何访问一个受保护的静态内部类?
public class A{
protected static class AInner{
public void test(){
}
}
}
public class B extends A{
public void hello(){
//怎样才能访问AInner中的test方法呢?
}
}
为什么当A和B在不同包中时,new AInner().test()
会编译报错呢?
而当A和B在同一个包中,却不会报错?
A
B
Différents packages signaleront des erreurs car le constructeur de A.AInner est le constructeur par défaut et le niveau d'accès par défaut permet aux sous-classes du même package d'utiliser .Donc, si vous pouvez changer la classe A, vous pouvez écrire un constructeur protégé ou de niveau public.
Si vous ne changez pas la classe
A
, vous pouvez regarder ceci.J'ai écrit une démo accessible.
Structure

Catégorie A :
Catégorie B :
Pourquoi ?
protected
La plage de visibilité est déterminée par la plage de visibilité, visible dans les packages et les classes héritées.Comment y accéder ? Si vous devez forcer l'accès, modifiez simplement la visibilité par réflexion.