クラスフィールド・クラスメソッド
クラスフィールド
インスタンスフィールドがありましたが、クラスに属するクラスフィールド
というものもある。具体例としては、インスタンスがいくつ生成されたのか数える
countというものがある。
【例】
class Person{
public static int count = 0;
//...略
Person(String firstName,...);{
Person.count++;
... //↑こうすることで、インスタンスが生成されるたびに1ずつ足されていく。
クラスメソッド
class Person{
public static int count = 0;
//...略
public static void printCount(){
System.out.println("合計" + Person.count + "人です");
}
}
クラスメソッドは、インスタンスの生成がない場合でも呼び出すことが可能。
//<Main.java>にて
class Main{
public static void main(String[]args){
Person.printCount();
Person person1 = new Person( //...略 );
Person.printCount();
}
}
出力:
合計0人です
合計1人です
※クラスフィールドもクラスメソッドも「static」が付くので注意!
nullを使ったfullNameの書き換え
以前の記事で作成したfullNameの中身は「firstName + lastName」としてましたが
middleNameを追加で入れたい場合の書き方を具体例で書いてみます↓
(middleNameを持っていないインスタンスもあるため、条件分岐で示す)
※何もしていない状態だと、通常middleName(String型)の箇所には「null」が入っている。
(intの場合は0 / doubleの場合は0.0 / booleanの場合はfalse)
class Person{
...
public String fullName(){
if (this.middleName == null){
return this.firstName + " " + this.lastName;
}else{
return this.firstname + " " + this.middleName + " " + this.lastName;
}
}
...
カプセル化
定義したものを触って壊されないようにしておく時に使用する仕組みのこと。
パソコンの内部のようなイメージ。
今までは「public」と書いていたが「private」と書くようにする。
※privateなフィールドにはMainクラスから変更などのアクセスができなくなる。
ゲッター
privateにした上で、クラス外から安全に値を取得するために
フィールドの値を返す仕組みのこと。「getフィールド名」と書く。
セッター
privateに設定後、クラス外で値を変更したい際に使う仕組み。「setフィールド名」と書く。
//<Person.java>にて...コンストラクタを書いた後↓
...
public String getMiddleName() {
return this.middleName;
}
//まず、ゲッターを定義した後にセッターを定義
public void setMiddleName(String middleName) {
this.middleName=middleName;
}
...
//<Main.java>にて...Person person1 = new Person("山田","花子"...);と書かれている場合。
...
person1.setMiddleName("Claire"); //変更したい場合。
System.out.println("ミドルネームを" + person1.getMiddleName() + "に変更しました");
復習課題に取り掛かってみて
・ゲッターを定義する場合
public String getName(){
return this.name;
上記の際に()を忘れてしまうのでしっかり見直す。覚えなおす。
今後
一度ここまでのオブジェクト指向を自分で書けるように進歩するために
Progateや他サイトを使いながら書き方を復習しようと思う。
そこでなにか疑問や、わかったところなどあればまた書いてみようと思う。