プライベート変数のテスト2008年07月02日 18時30分06秒

private 関数が main 関数から参照出来たので、更に調べてみた。今回は、private 変数だ。

private 変数も、main 関数から参照、そして変更できる。


% cat Private.java 
class Private
{
        private int Private = 21;;

        public static void main(String[] args)
        {
                Private p = new Private();
                System.out.println(p.Private);
                p.Private = 12;
                System.out.println(p.Private);
        }
}

こちらが実行結果。

% javac Private.java 
% java Private
21
12

ただし、private の仕様上、他のクラスにある main 関数からは参照出来ない。


% cat Public.java 
class Public
{
        public static void main(String[] args)
        {
                System.out.println(new Private().Private);
        }
}
% javac Public.java 
Public.java:5: Private has private access in Private
                System.out.println(new Private().Private);

確かに、仕様上は、

A private class member or constructor is accessible only within the class body in which the member is declared and is not inherited by subclasses.
とあるので仕様違反ではないが、main 関数から、private 関数を呼びたい放題呼べ、private 変数を自由に変更できてしまうではないかと思うのは私だけだろうか。

前回