それは非常にばかげているようですが、私は本当に混乱しています。コードの下に参照してください。スーパークラスのprotectedメソッドは、別のパッケージのサブクラスで表示されますか?
package com.one;
public class SuperClass {
protected void fun() {
System.out.println("base fun");
}
}
----
package com.two;
import com.one.SuperClass;
public class SubClass extends SuperClass{
public void foo() {
SuperClass s = new SuperClass();
s.fun(); // Error Msg: Change visibility of fun() to public
}
}
私は保護されたメンバーは、別のパッケージ内のサブクラスで表示されていることを、同様のOracleドキュメントとhereから読みました。だからfun()はパッケージ2のSubClassに表示されるはずです。それではなぜエラー?
非常に明白な何かがひどく欠けていますか?
このメソッドは、 'SubClass'自体のインスタンスで可視です。ですから 'this.fun()'を呼び出すことができます。しかし、別のインスタンスを作成し、そのメソッドを呼び出そうとすると、 'SubClass'のインスタンスは' ** SuperClass'の**インスタンスとは関係がないので、許可しません。 – Zabuza
"Visible"はあなたに完全な画像を与えません。 'this.fun()'や単に 'fun()'のようなメソッドを呼び出すこともできますが、 'SuperClass'の新しいインスタンスを作成すると、' SubClass'が 'regular "それを継承しているにもかかわらず、" SuperClass "のクライアント。 – dasblinkenlight
今、欠けているリンクがあります。 :)ありがとう – Dexter