-7

このような機能を実装してプライベート メンバーにアクセスするにはどうすればよいですか?

Java は、コンパイル時にのみアクセス許可をチェックします。びっくりした?この事実を知り、とても驚きました。

したがって、サードパーティ クラスのスケルトンを作成できます (空の実装でも)。興味深いメソッドは、プライベートではなく保護する必要があります。サブクラスを作成し、スタブに対してコンパイルします。次に、サブクラスのみをパッケージ化し、「実際の」クラスで実行してみます。それはうまくいくはずです。プライベートメソッドまたはフィールドにアクセスする必要があるときに試してみましたが、うまくいきました。

参照。https://stackoverflow.com/a/4440051/1312423

4

1 に答える 1

3

Java は、コンパイル時にのみアクセス許可をチェックします。びっくりした?

はい、実行時にアクセス修飾子もチェックするためです。


私はから始めます

public class AnotherClass {
    protected static void printMe() {
        System.out.println("Hello World");
    }
}

public class Main {
    public static void main(String... args) {
        AnotherClass.printMe();
    }
}

コンパイルして実行します。

再コンパイルせずに変更するprintMe()と、コンパイルされますが、実行すると取得されます。privateMainMain

Exception in thread "main" java.lang.IllegalAccessError: tried to access method AnotherClass.printMe()V from class Main
    at Main.main(Main.java:22)
于 2012-10-10T10:48:50.413 に答える