如何访问一个受保护的静态内部类?
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在同一个包中,却不会报错?
new AInner().test()
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
A B A.AInner のコンストラクターがデフォルトのコンストラクターであり、 のデフォルトのアクセス レベルにより、同じパッケージ内のサブクラスが を使用できるため、パッケージが異なるとエラーが報告されます。 クラス A を変更できれば、移植された、またはパブリック レベルのコンストラクターを作成できます。
A
B
Aクラスを変更しない場合は、これを見てください。 アクセス可能なデモを書きました。
構造
カテゴリー A:
カテゴリー B:
なぜですか? protected可視範囲は、パッケージおよび継承クラス内で可視となる可視範囲によって決まります。 アクセス方法は?強制的にアクセスする必要がある場合は、リフレクションを通じて可視性を変更するだけです。
protected
リーリーA
B
A.AInner のコンストラクターがデフォルトのコンストラクターであり、 のデフォルトのアクセス レベルにより、同じパッケージ内のサブクラスが を使用できるため、パッケージが異なるとエラーが報告されます。クラス A を変更できれば、移植された、またはパブリック レベルのコンストラクターを作成できます。
A
クラスを変更しない場合は、これを見てください。アクセス可能なデモを書きました。
構造

カテゴリー A:
リーリーカテゴリー B:
リーリーなぜですか?
protected
可視範囲は、パッケージおよび継承クラス内で可視となる可視範囲によって決まります。アクセス方法は?強制的にアクセスする必要がある場合は、リフレクションを通じて可視性を変更するだけです。