メソッドのオーバーライド

オーバーライドは、サブクラス側において、スーパークラスで定義されているメソッドと同じ名前(引数の型、数、並びも同じ)のメソッドを定義する機能。
メソッドのオーバーライドを行うと、サブクラス側のメソッドが優先敵に呼び出される。しかしこれはスーパークラスのメソッドを上書きしているわけでなく、必要に応じて酸ー派暮らすのメソッドを呼び出すことも可能。

メソッドのオーバーライドに関しては、次のルールが適用される。
・final修飾子が付けられたメソッドをオーバーライドすることはできない。
・staticとされたメソッドをオーバーライドして、非staticとすることはできない。
・非staticとされたメソッドをオーバーライドして、staticとすることはできな。
・オーバーライドする側のメソッドとオーバーライドする側のメソッドは、戻り値として同じデータ型を持つ必要がある。JDK5では共変戻り値とすることも可能である。
・オーバーライドする側のメソッド名とメソッドの引数の数およびデータ型は、オーバーライドされる側のものと一致する必要があり、その際のデータ型の指定順序も同じにする必要がある。ただし、引数名は異なるものを使用できる。
・サブクラスのアクセス制限はスーパークラスのものと同じか、それより緩い制限でなければならない。
・オーバーライドされる側のメソッドの宣言にthrowsがある場合、オーバーライドする側は次の4つの条件のいずれかが成立していなければならない。
 - オーバーライドされる側のメソッドのthrows句に指定されているのと同じ例外クラスをスローする。
 - オーバーライドされる側のメソッドのthrows句に指定されている例外クラスのサブクラスをスローする。
 - オーバーライドされる側のメソッドにthrows句があっても、オーバーライドする側のメソッドにthrows句を使用しない。
 - RuntimeExceptionおよびRuntimeExceptionのサブクラスの例外は、スーパークラスのメソッドに関係なくスローできる。

継承していないメソッドについてはオーバーライドできない。例えばスパークラスでprivateとされているメソッドは継承されないので、オーバーライドす ることはできない。スーパークラスでprivateとされているメソッドと同じシグニチャを持つメソッドを、サブクラスで独自に記述することは可能だが、オ ーバーライドとはみなされない。

オーバーライドのルールに違反すると、コンパイルエラーとなる。

JDK5より以前では、オー払い度する側のメソッドの戻り値は、オーバーライドされる側のメソッドの戻り値と同じものである必要があった。これに対しJDK5以降では、オーバーライドする側のメソッドの戻り値は、オーバーライドされる側のメソッドの戻り値のサブクラスとすることも可能となっている。このタイプのオーバーライドする側のメソッドの戻り値は共変戻り値と呼ばれる。

投稿者 java

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です