1

そのサブクラスはスーパークラスからすべてを継承しているのではありませんか?ただし、サブクラスはスーパークラスのプライベート属性/メソッドにアクセスできませんでしたが、独自の属性/メソッドにはアクセスできます。そこで、テストプログラムを作成しました。しかし、サブクラスには1つもないようです。

class a {
    private void set() {
           System.out.println("a.set()");
    }
}
public class b extends a {
//      private void set() {
//      System.out.pritln("b.set()");
//       }
        void f() {
             set();
        }
        public static void main(String[] args) {
             b b = new b();
             b.f();
        }
}

例のようにbのset()メソッドをコメントアウトすると、コンパイルされません。

何か案が?JVMビューからの説明はありますか?

4

3 に答える 3

4

はい、private派生クラスからメソッドにアクセスすることはできません。protectedそしてpublicです。

派生クラスで宣言すると、この派生バージョンがクラスの一部になるため (基底クラス メソッドsetではなくなる)、この派生バージョンにアクセスできるようになります。private

を呼び出そうとすると、エラーが発生しますsuper.set()

編集:アロスが話しているトリックは、反射だと思います。:)しないでください。

于 2012-07-26T01:53:25.150 に答える
0

質問は無意味です。プライベートはプライベート。現在のクラス以外のすべてのものから見えません。「保護」したい場合は、それを使用してください。

于 2012-07-26T01:54:07.897 に答える
0

その中間が必要な場合は、「private」修飾子の代わりに「protected」修飾子を使用してください。protected は基本的に、サブクラス以外のすべてに対してプライベートであることを意味します。

于 2012-07-26T02:04:57.343 に答える