Java メソッドのオーバーライド
Java メソッドのオーバーライド
このチュートリアルでは、例を使って Java でのメソッドのオーバーライドについて学びます。
前回のチュートリアルでは、継承について学びました。継承は、既存のクラス (スーパークラス) から新しいクラス (サブクラス) を派生させることを可能にする OOP プロパティです。サブクラスは、スーパークラスの属性とメソッドを継承します。
ここで、スーパークラスとサブクラスの両方で同じメソッドが定義されている場合、サブクラス クラスのメソッドがスーパークラスのメソッドをオーバーライドします。これは、メソッドのオーバーライドとして知られています。
例 1:メソッドのオーバーライド
class Animal {
public void displayInfo() {
System.out.println("I am an animal.");
}
}
class Dog extends Animal {
@Override
public void displayInfo() {
System.out.println("I am a dog.");
}
}
class Main {
public static void main(String[] args) {
Dog d1 = new Dog();
d1.displayInfo();
}
}
出力 :
I am a dog.
上記のプログラムでは、 displayInfo()
メソッドは Animal の両方に存在します スーパークラスと犬 サブクラス。
displayInfo()
を呼び出すとき d1 を使用して object (サブクラスのオブジェクト)、サブクラス Dog 内のメソッド と呼ばれます。 displayInfo()
サブクラスのメソッドは、スーパークラスの同じメソッドをオーバーライドします。
@Override
の使用に注意してください この例の注釈。 Java では、注釈はコンパイラに情報を提供するために使用したメタデータです。ここでは、@Override
アノテーションは、このアノテーションの後のメソッドがスーパークラスのメソッドをオーバーライドするコンパイラを指定します。
@Override
の使用は必須ではありません .ただし、これを使用する場合、メソッドはオーバーライドのすべての規則に従う必要があります。それ以外の場合、コンパイラはエラーを生成します。
Java オーバーライド ルール
- スーパークラスとサブクラスの両方で、同じメソッド名、同じ戻り値の型、および同じパラメーター リストが必要です。
final
として宣言されたメソッドをオーバーライドすることはできません とstatic
.- スーパークラスの抽象メソッドは常にオーバーライドする必要があります (後のチュートリアルで説明します)。
Java オーバーライドの super キーワード
Java でオーバーライドを実行しているときに発生する一般的な質問は次のとおりです。
オーバーライド後にスーパークラスのメソッドにアクセスできますか?
そうですね、答えははいです .サブクラスからスーパークラスのメソッドにアクセスするには、 super
を使用します キーワード。
例 2:super キーワードの使用
class Animal {
public void displayInfo() {
System.out.println("I am an animal.");
}
}
class Dog extends Animal {
public void displayInfo() {
super.displayInfo();
System.out.println("I am a dog.");
}
}
class Main {
public static void main(String[] args) {
Dog d1 = new Dog();
d1.displayInfo();
}
}
出力 :
I am an animal. I am a dog.
上記の例では、サブクラス Dog メソッド displayInfo()
をオーバーライドします スーパークラス Animal の .
メソッド displayInfo()
を呼び出すと、 d1 を使用して 犬のオブジェクト サブクラス、Dog 内のメソッド サブクラスが呼び出されます。スーパークラス内のメソッドは呼び出されません。
displayInfo()
内 犬の サブクラス、super.displayInfo()
を使用しました displayInfo()
に電話する スーパークラスの。
Java のコンストラクターは継承されないことに注意することが重要です。したがって、Java ではコンストラクターのオーバーライドなどはありません。
ただし、サブクラスからスーパークラスのコンストラクターを呼び出すことができます。そのために、super()
を使用します。 .詳細については、Java スーパー キーワードにアクセスしてください。
メソッドのオーバーライドにおけるアクセス指定子
スーパークラスとそのサブクラスで宣言された同じメソッドは、異なるアクセス指定子を持つことができます。ただし、制限があります。
これらのアクセス指定子は、スーパークラスのアクセス指定子よりも大きなアクセスを提供するサブクラスでのみ使用できます。たとえば、
メソッド myClass()
があるとします。 スーパークラスでは protected
と宣言されています .次に、同じ方法 myClass()
サブクラスでは public
のいずれかになります または protected
、ただし private
ではありません .
例 3:オーバーライドのアクセス指定子
class Animal {
protected void displayInfo() {
System.out.println("I am an animal.");
}
}
class Dog extends Animal {
public void displayInfo() {
System.out.println("I am a dog.");
}
}
class Main {
public static void main(String[] args) {
Dog d1 = new Dog();
d1.displayInfo();
}
}
出力 :
I am a dog.
上記の例では、サブクラス Dog メソッド displayInfo()
をオーバーライドします スーパークラス Animal の .
displayInfo()
を呼び出すたびに d1 を使用して (サブクラスのオブジェクト)、サブクラス内のメソッドが呼び出されます。
displayInfo()
protected
と宣言されています 動物で スーパークラス。同じメソッドには public
があります Dog のアクセス指定子 サブクラス。 public
protected
よりも大きなアクセスを提供します .
抽象メソッドのオーバーライド
Java では、抽象クラスは他のクラスのスーパークラスとして作成されます。また、クラスに抽象メソッドが含まれている場合は、それをオーバーライドすることが必須です。
後のチュートリアルで、抽象クラスと抽象メソッドのオーバーライドについて詳しく学びます。
Java
- Java オペレーター
- Java try-with-resources
- Java アノテーション
- Java アノテーション タイプ
- Java の String Length() メソッド:例で見つける方法
- 部分文字列と例を含む Java String indexOf() メソッド
- Java String charAt() メソッドと例
- Java String compareTo() メソッド:例での使用方法
- Java String contains() メソッド |部分文字列を例でチェック
- 例を使用したJava文字列のendsWith()メソッド
- Java 文字列 replace()、replaceAll() および replaceFirst() メソッド