HOME > オーバーライド
オーバーライド
オーバーライドは、継承元の親クラスと同じメソッド名・同じ引き数のメソッドを定義して、メソッドを上書きすることをいいます。
メソッドを上書きしてしまうので、元のメソッドの機能は無効になります。
※ただし、superキーワードを使うことによって元メソッドの機能を呼ぶこともできます。
(詳しくは→superをご覧ください。)
【オーバーライドのルール】
・メソッドの「メソッド名」「引き数」「戻り値」を全く同じにする必要がある。
(戻り値はサブクラスでもOK)
・throws句は子で指定しなくてもオーバーライドとして認識される。
・throws句のExceptionクラスは親と同じか、サブクラスでなければならない。
・アクセスレベルは下げる事はできない(元がpublic指定で、子がprivate指定等)。
継承元と同じか、より広いアクセスレベルであればOK。
・final修飾子が付いているメソッドはオーバーライドはできない。
サンプルソース
例)オーバーライドサンプル
- OyaClass.java
-
//★親クラス public class OyaClass { //メソッドA public void hogeA(){ System.out.println("Oya-hogeA"); } //メソッドB public void hogeB() throws Exception{ System.out.println("Oya-hogeB"); } //メソッドC(final指定なのでオーバーライドは不可) public final void hogeC(){ System.out.println("Oya-hogeC"); } }
- KoClass.java
-
//★子クラス public class KoClass extends OyaClass{ //メソッドAをオーバーライドする public void hogeA(){ //←親がpublicなので、privateとかにはできない。 System.out.println("Ko-hogeA"); } //メソッドBをオーバーライドする public void hogeB() throws NullPointerException{ //↑NullPointerExceptionはExceptionのサブクラスなのでOK System.out.println("Ko-hogeB"); } //メソッドD public void hogeD() throws Exception{ System.out.println("Ko-hogeD"); } }
- Test.java
-
//★実行用クラス public class Test { public static void main(String[] args) throws Exception{ KoClass ko = new KoClass(); ko.hogeA(); ko.hogeB(); ko.hogeC(); ko.hogeD(); } }
実行結果
- コマンドプロンプト
- C:\>java Test Ko-hogeA Ko-hogeB Oya-hogeC Ko-hogeD
hogeA、hogeBはオーバーライドされているので、子クラスのメソッドが呼ばれています。
hogeCはオーバーライドされていないので、親クラスのメソッドが呼ばれています。
hogeDは子クラスのみに定義されたメソッドです。
オーバーライドしたメソッドでも、superキーワードを使うことでオーバーライドされる前の処理を呼ぶこともできます。 詳しくは→superをご覧ください。