【18章】Javaを学ぼう


今回の記事はオブジェクト指向の重要な機能の1つである、カプセル化によってフィールドとメソッドへのアクセスを制限することを学んでいきたいと思います。「【15章】Javaを学ぼう」から今回まで改善を重ねてきた自己紹介プログラムを今回も使用していきます。私自身のアウトプットの場となりますので、よろしくお願いいたします。

カプセル化について

「カプセル化」とは、使い手に必要ないものを隠してしまうことを言います。具体的にはフィールドとメソッドへのアクセスを制限することです。クラスの外部からアクセスできるようにするには「public」を、アクセスできないようにするには「private」を用いて定義します。

Person.java
class Person {
   .
   .
 private String middleName;  
   .
   .
   .

 public String fullName() {
  if(this.middleName == null) {
     //クラス内からはアクセスできる
   .
   .
   .
  }
 } 
}

上図のようにprivateでも、クラス内からはアクセスすることが可能ですが、一方で下図のようにフィールドにクラスの外からアクセスすることができなくなります。

Main.java
class Main {
 public static void main(String[] args) {
  Person person = new Person("Mia", "Christopher", "Olivia",......);
  System.out.println(person.middleName);
                     //クラス外からはアクセスできない
 }
}

ゲッターについて

フィールドをprivateにした上で、クラス外から安全にフィールドの値を取得するために、フィールドの値を返すだけのメソッドを定義します。これをゲッターと呼びます。
ゲッターは「getフィールド名」のように命名するのが一般的です。

Person.java
class Person {
   .
   .
 private String middleName;  
   .
   .
   .

 public String getMiddleName() {
  return this.middleName;
        //フィールドの値を返す
 } 
}
Main.java
class Main {
 public static void main(String[] args) {
  Person person = new Person("Mia", "Christopher", "Olivia",......);
  System.out.println(person.getMiddleName());
                     //ゲッターを使うことによりアクセス可能に
 }
}

これでクラス外からでもアクセスすることが可能になりました。

セッターについて

フィールドのアクセス権をprivateにすると、当然フィールドの値をクラスの外から変更することもできなくなります。そこで、フィールドの値を変更するメソッドを定義します。
このような、フィールドの値を変更するメソッドを特に「セッター」といいます。セッターは「setフィールド名」のように命名するのが一般的です。

Person.java
class Person {
   .
   .
 private String middleName;  
   .
   .
   .

 public void setMiddleName(String middleName) {
  this.middleName = middleName;
        //フィールドに値をセット
 } 
}
Main.java
class Main {
 public static void main(String[] args) {
  Person person = new Person("Mia", "Christopher", "Olivia",......);
  Person.setMiddleName("Charlotte");
  System.out.println(person.getMiddleName());
 }
}

これでクラスの外から変更することができました。

今回の記事はここまでとします。これでひとまず自己紹介プログラムは完成しました。
次章では「オブジェクト指向」についてさらに基礎を定着させるための記事を書いていきます。よろしくお願いいたします!
最後までご覧いただき、ありがとうございました!