Javaの基礎3
今日も張り切っていきましょう!
・オブジェクト
例:自己紹介をする、年齢などの情報を持ったプログラムがこれに当てはまる
・オブジェクトの中には情報と振る舞いが含まれる
・インスタンス(実体)とはオブジェクトの別名である
・クラスはインスタンスの設計図である
・クラスの中に情報や振る舞いを設計する
・インスタンスの生成:new Person ();
・インスタンスは変数に代入して使用します
例:クラス名 変数名 = new クラス名()とする
Person person1 = new person ();
・インスタンスは大量に作ることができる
例;
Person person2 = new person();
Person person3 = new person();
Person person4 = new person();
・インスタンスの情報に当たるものをインスタンスフィールドと呼ぶ
・インスタンスの振る舞いにあたるものをインスタンスメソッドと呼ぶ
・インスタンスメソッドの定義
例:
class Person {
public void hello(){
System.out.println(“こんにちわ”);
}
}
*staticがない点に注意
例:
Person person1 = new Person();
Person person2 = new Person();
person1.hello();
person2.hello();
・インスタンスフィールドの定義 : public データ型 変数名
例:
class Person {
public String name;
}
・インスタンスフィールドへのアクセス
例;
Person person1 = new Person();
person1.name = “suzuki”;
System.out.println(person1.name);
・this :thisは呼ばれた時に、そのメソッドを呼び出しているインスタンスに置き換えられる
例:
Person.java
class Person {
public String name;
publid void hello () {
System.out.println(“こんにちは、私は”+ this.name + “です”);
}
}
Main.java
Person person1 = new Person();
person1.name = “suzuki”;
person.hello();
結果:こんにちは、私はsuzukiです と出力される
・コンストラクタ:newを使ってインスタンスを生成した後に自動で呼び出されるメソッド
コンストラクタの定義方法
・コンストラクタ名はクラス名と同じにする
・戻り値を書いてはいけない
・voidを書いてはいけない
例:
Person() {
System.out.println("インスタンスが生成されました");
}
・コンストラクタに情報を渡す
例:
class Main {
public static void main(String[] args) {
Person person1 = new Person("Kate Jones");
person1.hello();
Person person2 = new Person("John Christopher Smith");
person2.hello();
}
}
class Person {
public String name;
Person(String name) {
System.out.println("インスタンスが生成されました");
this.name = name;
}
public void hello() {
System.out.println("こんにちは、私は" + this.name + "です");
}
}
・クラスフィールドの定義:public static データ型 変数名;
・クラスフィールドへのアクセス:クラス名.クラスフィールド名
例:countフィールド
class Person {
public static int count = 0;
Person(String firstName, ….){
Person.count++;
}
}
インスタンス生成の度にcountが1追加されていく
・クラスメソッド:public static 戻り値の型 メソッド名() {}
・クラスメソッドの呼び出し方:クラス名.メソッド名()
・コンストラクタのオーバーロード:引数の異なるコンストラクタを新たに定義する
例:
Person(String firstName, String lastName, int age, double height, double weight) {
Person.count++;
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
this.height = height;
this.weight = weight;
}
Person(String firstName, String middleName, String lastName, int age, double height, double weight) {
Person.count++;
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
this.height = height;
this.weight = weight;
this.middleName = middleName;
}
・this():コンストラクタから他のコンストラクタを呼び出すことができる
*this()はコンストラクタの先頭でしか呼び出せません
例:
Person(String firstName, String lastName, int age, double height, double weight) {
Person.count++;
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
this.height = height;
this.weight = weight;
}
Person(String firstName, String middleName, String lastName, int age, double height, double weight) {
this(firstName, lastName, age, height, weight);
this.middleName = middleName;
}
・middleNameがnullかどうかによって変える値を変更する
例:
public String fullName() {
if (this.middleName == null) {
return this.firstName + " " + this.lastName;
} else {
return this.firstName + " " + this.middleName + " " + this.lastName;
}
}
カプセル化:回路を隠すこと
・具体的にはフィールドとメソッドへのアクセスを制限すること
・クラスの外部からアクセスできるようにするにはpublicを、アクセスできないようにするにはprivateを用い て定義します
・フィールドのアクセス権をprivateにすると、フィールドにクラスの外からアクセスすることができなくなる
・privateでもクラス内からはアクセスすることが可能である
・ゲッター:getフィールド名と命名するのが一般的
フィールドをprivateにした上で、クラス外から安全にフィールドの値を取得するために、フィールドのあたいだけを返すだけのメソッドを定義する
例:
public String getMiddleName() {
return this.middleName;
}
System.out.println("ミドルネームを" + person1.getMiddleName() + "に変更しました");
person1.printData();
これでprivateのフィールドの値を取得することができる
・セッター:setフィールド名と命名するのが一般的
フィールドの値を変更するメソッドを特にセッターという
カプセル下の定石
・フィールド:private
・メソッド:public
例:
public void setMiddleName(String middleName) {
this.middleName = middleName;
}
person1.setMiddleName("Claire");
System.out.println("ミドルネームを" + person1.getMiddleName() + "に変更しました");
person1.printData();
理解がむずかしい部分もありますが、繰り返し学んでいきたいと思います!