オブジェクト指向
楽にプログラムを組み立て、修正できるように存在する指向のこと。
プログラムの中に人間がいるかのようにし、それぞれに自己紹介をさせるような形。
オブジェクト(別名:インスタンス)
情報と振る舞いに分けられる。
情報の種類としては、名前・年齢など。
振る舞いの種類としては、hello・walkなど。
※情報=インスタンスフィールド
※振る舞い=インスタンスメソッド
クラス(メソッドをまとめる部品)
インスタンスの設計図を意味する。
インスタンス
インスタンスを生成する際は基本的には変数に代入して用いる。
「クラス型 変数名 = new クラス名();」
※大文字・小文字の違いに気を付ける。
※変数名に1、2、3など数字を付ける事で大量に作ることが可能。
インスタンスフィールド
情報を格納しておく変数のこと。
基本的にクラスの一番上で定義する。
class Person{
public String name;
}
呼び出し方としては
/*<Main.java>にて*/
...
Person person1 = new Person();
person1.name = "Suzuki";
System.out.println(person1.name);
インスタンスメソッド
一般的な定義の仕方として↓
class Person {
public void hello(){ //「static」はつかないので気を付ける
System.out.println("こんにちは");
}
}
呼び出し方としては
/*<Main.java>にて*/
Person person1 = new Person();
Person person2 = new Person();
person1.hello();
person2.hello();
/*インスタンスを生成した後でないと呼び出せないので注意!*/
thisの使い方
this.変数名 とすることで、このクラスの変数と特定することができる。
【例】
class Person{
public String name;
public void hello(){
System.out.println ("こんにちは"+ this.name + "です");
/*ここで、下記の「Suzuki」に置き換えられる↑*/
}
}
/*<Main.java>にて*/
Person person = new Person();
person.name = "Suzuki";
person.hello(); //←ここで出力!
コンストラクタ
newを使ってインスタンスを生成した後、自動で呼び出されるメソッドのこと。
定義として下記のような決まりがあるので気を付ける。
<1>コンストラクタ名はクラス名を同じにする
<2>戻り値を書いてはダメ!(voidも)
class Person{
public String name;
Person (String name){
/*↑コンストラクタ名*/
this.name = name;
}
}
呼び出し方↓
/*<Main.java>にて*/
Person person = new Person("Suzuki");
System.out.println(person.name);
自己紹介文を書いてみる
※引数ではなく、thisで書いていくこと。
class Person{ /*まずクラスの一番上で定義*/
public String firstName;
public String lastName;
public int age;
public double height;
public double weight;
/*コンストラクタで複数を定義・並び順間違えないよう注意!*/
Person(String firstName,String lastName,int age, double height, double weight){
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
this.height = height;
this.weight = weight;
}
public String fullName(){
return this.firstName + " " + this.lastName;
}
public double bmi(){
return this.weight/this.height/this.height;
}
/*出力用にprintDataを定義!!↓*/
public void printData(){
System.out.println("私の名前は"+this.fullName()+"です");
System.out.println("年齢は"+this.age+"歳です");
System.out.println("BMIは"+Math.round(this.bmi())+"です");
}/*fullNameとbmiの後に()を忘れない!/Math.roundは四捨五入用*/
}
呼び出し↓
/*<Main.java>にて*/
...
Person person1=new Person("Kate","Jones",27,1.6,50.0);
person1.printData();
...
オーバーロード
ここで意味するオーバーロードとは、
person1がミドルネーム無し、person2がミドルネーム有りという場合
2つのコンストラクタを定義することで解決ができる。
【例】
class Person{
//...略
public String middleName; //インスタンスフィールドの定義しているところにプラス。
Person(String firstName,String lastName, ...); //1つ目のパターン
//...※略
Person(String firstName,String middleName,String lastName, ...); //2つ目のパターン
//...※略
上記の「※略」のところは、ほぼ重複するので、2つ目の方は省略の書き方として
...
this(firstName,lastName,...weight); //ここで他のコンストラクタを呼び出す
this.middleName = middleName; //追加したい物はここに書く
振り返り・気を付ける事
・()を付けるのか、付けないのかなどがこんがらがってしまうので
しっかり確認しながら書いていく。
・以前の記事で、スペースの使い方やインデントのアドバイスをいただいたので
しっかり癖付けていきたいと思った。