如何访问一个受保护的静态内部类?
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
不同套件會錯誤是因為A.AInner的建構器是預設建構器,而預設存取等級是允許同套件的子類別使用的。A
B
不同包会报错是因为 A.AInner的构造器是默认构造器,而默认访问级别是允许同包的子类使用的。所以如果你可以改A类那么你可以写个 portected或者public级别的构造器。
如果你不改
如果你不改A
所以如果你可以改A類別那麼你可以寫個 portected或是public等級的建構器。A
類,你可以看看這個。我寫了一個可以訪問的demo。
結構
A類:
🎜B類:🎜 rrreee為什麼?
protected
可見性範圍決定的呀,包內、繼承類別內可見。怎麼訪問?如果非要強制訪問,透過反射修改可見性即可。