
凄く久しぶりだけど・・・前回の続き・・・去年の9月で止まってた(´;ω;`)
で、今回はオーバーライドについてやっていきます。
サブクラスでは、メソッドを追加する以外に継承したメソッドの機能を変更することができる。
ただし、機能の変更は ちょっと変えてみよう と思って自発的に行うものとは少し違います。
機能の変更は、継承しただけでは役立たずのメソッド、変更しなければコンパイルエラーになるメソッド(このため、スーパークラスでは抽象クラスという特別な仕掛けを使う場合がある。それについては次の章で説明します。
大事なことは
特別な継承が機能を変更する継承です。
理由として、
スーパークラスで大まかな仕組みを作っておいて機能の詳細はサブクラスで仕上げる
という場合に使う方法だからです。
継承したメソッドの機能を変えるには、同じ名前のメソッドを作って、処理内容だけを変えます。
メソッドのアクセス修飾子、戻り値型、引数の型、数、並びは原則同じにします。
この様な書き換えを オーバーライド といいます。
詳しくはもう少し先で説明します。
toStringメソッドは、オブジェクトのフィールド変数の値などを文字列にして返すメソッドです。
package sample18_03;
public class Exec {
public static void main(String[] args) {
Member member = new Member(118, "田中宏"); //
System.out.println(member.toString()); // toString
}
}
プログラムのほうはこんな感じになりますね。
起動してみると・・・・・

コンソールにこう表示されます。
ここからは、オーバーライドの方法についてやっていこうと思います。
まず、MemberクラスでtoStringメソッドをオーバーライドしてみます。
その前に書き方を・・・
public String toString()
引数; なし
戻り値; オブジェクトの文字列表現を返す
オーバーライドするためには、これと全く同じ形式でメソッドを定義しなくてはいけません。
原則として、アクセス修飾子、引数、戻り値型を変更しないことが要件です
package sample18_04;
public class Member {
private int id;
private String name;
public Member(int id, String name) {
this.id = id;
this.name = name;
}
@Override=======================
public String toString(){
return "Member[id="+id+", name="+name+"]"; オーバーライド
}===========================
public int getId() {
return id;
}
public String getName() {
return name;
}
}
@Override
public String toString(){
return "Member[id="+id+", name="+name+"]";
}この部分がオーバーライドしたtoStringメソッドです。
クラス名と変数名、変数の値を文字列に合成して返す、という内容です。
また、Java言語では、@で始まるものをアノテーションといい、コンパイラに情報を伝えるために使われる。
@Override
は、Overrideアノテーションといいこのメソッドがオーバーライドメソッドであることを示しています。
★オーバーライドの規則
ここで、オーバーライドの規則についてまとめておきます。
オーバーライドの規則
①引数の型、数、並び順を変更しない。
②原則として戻り値型を変更しない
ただし、戻り値型がオブジェクトの場合、サブクラス型に変えてもいい。
③アクセス修飾子は、より公開範囲の広いものだけに変更してもよい。
今回はここまでにしておきますかね・・・
参考書は__________________________________
川場 隆 Kawaba Takashi
秀和システム
______________________________________
BY マんタ











