オーバーライドが適用されるのはprivateアクセスレベルを除く、インスタンスメソッドのみです。privateアクセスレベルは同一クラス内のみに参照可能なため、クラスをまたぐオーバーライドの概念には当てはまりません。スーパークラスで定義されているクラスメソッド、メンバ変数をサブクラスで再定義することは隠蔽と言われ、オーバーライドとは区別されます。
オーバーライドを定義する際には以下の規定があります。 |
| 1. |
オーバーライドする側はオーバーライドされる側と戻り型、インスタンスメソッド名、引数型、引数の数が同じでなければなりません。どれか一つでも異なる場合はオーバーライドとは見なされません。 |
| |
 |
| 2. |
オーバーライドされる側のインスタンスメソッドに指定されるアクセスレベルより厳しい制限を持つアクセスレベルをオーバーライドする側のインスタンスメソッドに付与することはできません。例えばオーバーライドされる側のインスタンスメソッドにprotectedが指定されている場合、オーバーライドする側のインスタンスメソッドにprivateを指定することはできません。 |
| 3. |
オーバーライドされる側のインスタンスメソッドに指定されるthrows節以外の例外をオーバーライドする側のインスタンスメソッドに指定することはできません。但し、オーバーライドされる側に指定された例外をより限定する例外をオーバーライドする側に指定することはできます。 |
| 4. |
オーバーライドされる側のインスタンスメソッドにfinal修飾子が付与されている場合、そのインスタンスメソッドをオーバーライドすることはできません。 |
| 5. |
オーバーライドされる側のインスタンスメソッドにabstract修飾子が付与されている場合、そのメソッドはサブクラスで必ずオーバーライドしなければなりません。オーバーライドしない場合はそのサブクラス全体がabstractクラスになります。 |