お品書き
- オーバーライドって?
- オーバーライドとオーバーロードの違い
- オーバーライドSample
オーバーライドって?
サブクラスでスーパークラスのメソッドを再定義することを
オーバーライドという。
オーバーライドとは「上書き」という意味の英単語
▲条件
戻り値の型、メソッド名、引数の型と数が全て同じ
これが全てそろってはじめて上書きが出来る。
例
class Person{
void display(){
.
.
}
}
calss Student extendes Person{
void display(){
.
.
}
}
例2
Student stu = new Student();
stu.display();
stuを作るとオブジェクトの領域にSuperClassの情報とSubClassの情報の両方含まれる。
その中でSubClassのdisplayメソッドを呼び出すため、上書きしたあとのdisplayメソッドの処理が呼び出されて実行される動きになる。
オーバーロードとオーバーライドの違い
オーバーライドはメソッドの上書き
スーパークラスとサブクラスの間の関係
オーバーロードは1つのクラスの中で同じ名前のメソッドを複数定義できるのがオーバーロード
オーバーライドSample
java
public class Person2{
private String name; //メンバー変数として名前を持つ
public void setName(String n){ //設定するためのメソッド
name = n;
}
public String getName(){ //名前を取得するためのメソッド
return name;
}
public void display(){ //表示するためのメソッド
System.out.println("名前:" + name);
}
}
java
public class Student2 extends Person2{
private int stuNo;
public void setStuNo(int s){
stuNo = s;
}
public void display(){ //Person2クラスで持っていたdisplayメソッドを上書きしている
System.out.println("名前:" + getName()); //nameがprivate指定の為getNameメソッドを使う。
System.out.println("学籍番号:" + stuNo);
}
}
カプセル化をちょいと復習↑
継承した際にnameという情報を持つことはできるが、アクセスするときは別クラスになるため、getNameメソッドを経由して名前を取得するということを行う。
java
public class StuSample2{
public static void main(String[] args){
Student2 stu = new Student2();
stu.setName("大輔");
stu.setStuNo(1);
stu.display();
}
}
実行用クラスでdisplayメソッドを呼び出したときにSuperClassのdisplayかSubClassのdisplayメソッドのどちらが呼ばれるか。
cmd
C:\Java\1>java StuSample2
名前:大輔
学籍番号:1
上書きしたSubClassの名前と学籍番号が両方表示されるdisplayメソッドが呼び出された。