2015年9月16日水曜日

publicとprivate

メンバ変数とはなにか」ではメンバ変数が何かについて説明しました。このとき、メソッドを使ってメンバ変数を変更する理由を説明しましたが、もし間違いを防止するために「他のクラスからのアクセスを制限したい」という場合はどうすればいいでしょうか。こういうときはメンバ変数の頭にprivate(プライベート)とつけると他のアクセスから直接値を格納することはできなくなります。privateをつけた場合、メソッド経由でのみ値を格納することができます。

class Test{
 public static void main(String args[]){
    Subtest objectdayo = new Subtest();
    objectdayo.number = 10;
    objectdayo.display();
  }
}

class Subtest{
  private int number;

  void setNumber(int newNumber){
    if ((newNumber >= 1) && (newNumber <= 12)){
      number = newNumber;
    }
  }

  void display(){
    System.out.println("今日は"+ number + "月です。");
  }
}

これはコンパイルしようとするとエラーがでて、コンパイルすることができません。privateをつけたのにもかかわらずobjectdayo.number = 10; というように直接的に値を格納しようとしているからです。この場合、メソッド経由でのみ値を格納することができます。

class Test{
 public static void main(String args[]){
    Subtest objectdayo = new Subtest();
    objectdayo.setNumber(10);
    objectdayo.display();
  }
}

class Subtest{
  private int number;

  void setNumber(int newNumber){
    if ((newNumber >= 1) && (newNumber <= 12)){
      number = newNumber;
    }
  }

  void display(){
    System.out.println("今日は"+ number + "月です。");
  }
}

これだとコンパイルしてもエラーはでません。

逆に頭に public (パブリック)と書くと他のクラスからobjectdayo.number = 10;のように直接的な格納ができるようになります。頭に何も書いていない場合、その変数は public として使われますので、 public と書くのは省略することもできます。