Javaメソッドのオーバーライド(オーバーライド)とオーバーロード(オーバーロード)の違い(非常に詳細)
ホームこの知識のポイントを学びたい前に、まずポリモーフィズムとは何かを理解する必要がありますか?
初めてJavaを学ぶとき、オブジェクト指向言語であるJavaには、カプセル化、継承、およびポリモーフィズムという3つの特性があることを誰もが知っています。
ポリモーフィズムは、同じ行動の複数の異なる症状または形態を持つ能力です。
たとえば、ほとんどの動物(抽象クラス)は吠えることができますが、犬(実装クラス)は吠え、猫(実装クラス)は鳴き声を上げます。
多形実装に必要な条件
- サブクラスは親クラスを継承する必要があります
- リライト
- 親クラス参照は子クラスオブジェクトを指します
ポリモーフィズムを実装する方法
ポリモーフィズムを実装するには、書き換え、オーバーロード、インターフェイスの実装の3つの方法があります。実装方法は異なりますが、コアは次のとおりです。同じ動作のさまざまな表現。
ポリモーフィズムとは何かを一般的に理解した後、Javaメソッドのオーバーライドとオーバーロードを見てみましょう。
1.オーバーライド
- 親クラスと子クラスの間のポリモーフィックな関係は、親クラスの機能を再定義します。サブクラスで定義されたメソッドの名前とパラメーターがスーパークラスと同じである場合、これはオーバーライドされるメソッドです。
ただし、サブクラスが親クラスのメソッドを継承したくない場合や、メソッドの書き換えが必要な変更を加えたい場合があります。
メソッドの書き換えはサブ親クラスに反映されます。最も一般的なのは、サブクラスが親クラスのメソッドを書き換えることです。
書き換えコードは次のとおりです。
public class Father {
public void walk(){
System.out.println("我是父亲");
}
}
public class Son extends Father {
@Override//方法重写
public void walk() {
System.out.println("我是儿子");
}
}
- メソッドのオーバーライドは、メソッドのオーバーライドとも呼ばれます。
サブクラスメソッドがスーパークラスのメソッドと同じメソッド名、リターンタイプ、およびパラメーターリストを持っている場合、新しいメソッドが古いメソッドをオーバーライドします。 - サブクラスメソッドのアクセス変更権は、スーパークラスのアクセス変更権よりも小さくすることはできません。
2.過負荷
- 同じ名前の複数のメソッドが同時に存在し、パラメーター/タイプが異なります。オーバーロードは、クラスのポリモーフィズムの現れです
- オーバーロードする場合、メソッド名は同じである必要がありますが、パラメーターのタイプと番号は異なり、戻り値のタイプは同じでも異なっていてもかまいません。オーバーロードされたメソッドの識別基準として戻り値型を使用することはできません。!!パラメータの型が数値と同じで、戻り値の型が異なる場合、オーバーロードされません。
この記述方法では、エラーが直接報告されます。メソッドの場合、メソッドの戻り値の型がわからないためです。が呼び出されると、コンパイラはあなたを区別できません。どのメソッドが呼び出されますか。 - メソッドを呼び出すとき、異なる数のパラメーターとパラメーター・タイプを渡すことにより、使用する対応するメソッドが決定されます。これはポリモーフィズムです。
オーバーロードコードは次のとおりです。
public void eat(){
System.out.println("我是干饭人" );
}
// public int eat(){ 会报错
// return 4;
// }
//报错原因:参数类型和个数一样,返回值类型不同是不算重载的
//因为在调用方法的时候,我们还不知道方法的返回值类型,所以编译器无法区分你调用的是哪个方法。
public void eat(String name){
System.out.println("我是干饭人:"+name );
}
public void eat(String name,int age){
System.out.println("我是干饭人:"+name+"我今年"+age );
}
ここで注意してください:
オーバーライドのオーバーライドは親クラスとサブクラスの間のポリモーフィックな関係ですが、オーバーロードのオーバーロードはクラスのポリモーフィズムの現れです
3.まとめ
メソッドのオーバーロードオーバーロード:
1.同じクラスで
2.メソッド名は同じですが、パラメータリストが異なります(パラメータの順序、番号、タイプ)
3.メソッドの戻り値、アクセス修飾子は任意です
4.メソッドのパラメータ名とは関係ありません
このメソッドはオーバーライドをオーバーライドします。
1.継承関係のあるサブクラス内
2.メソッド名が同じで、パラメーターリストが同じ(パラメーターの順序、番号、タイプ)であり、メソッドの戻り値が同じである
3.アクセス修飾子。アクセス範囲は親クラスのアクセス範囲以上である必要があります
4.メソッドのパラメータ名とは関係ありません