LoginSignup
2
1

More than 3 years have passed since last update.

【初心者】Java オブジェクト指向/インスタンスフィールド/インスタンスメソッド/オーバーロード【備忘録24】

Last updated at Posted at 2020-01-12

オブジェクト指向

楽にプログラムを組み立て、修正できるように存在する指向のこと。
プログラムの中に人間がいるかのようにし、それぞれに自己紹介をさせるような形。

オブジェクト(別名:インスタンス)

情報と振る舞いに分けられる。
情報の種類としては、名前・年齢など。
振る舞いの種類としては、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; //追加したい物はここに書く

振り返り・気を付ける事

・()を付けるのか、付けないのかなどがこんがらがってしまうので
しっかり確認しながら書いていく。
・以前の記事で、スペースの使い方やインデントのアドバイスをいただいたので
しっかり癖付けていきたいと思った。

2
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1