如何访问一个受保护的静态内部类?
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
Pakej yang berbeza akan melaporkan ralat kerana pembina A.AInner ialah pembina lalai, dan tahap akses lalai membenarkan subkelas dalam pakej yang sama menggunakan .Jadi, jika anda boleh menukar kelas A maka anda boleh menulis pembina peringkat yang dibayangkan atau awam.
Jika anda tidak menukar kelas
A
, anda boleh melihat ini.Saya menulis demo yang boleh diakses.
Struktur

Kategori A:
Kategori B:
Kenapa?
protected
Julat keterlihatan ditentukan oleh julat keterlihatan, boleh dilihat dalam pakej dan kelas yang diwarisi.Bagaimana untuk mengakses? Jika anda mesti memaksa akses, cuma ubah suai keterlihatan melalui refleksi.