Javaのオーバーロードとオーバーライドの詳細な説明と例

高洛峰
リリース: 2017-01-21 16:56:22
オリジナル
1927 人が閲覧しました

多くの学生がオーバーロードとオーバーライドについて混乱しています。概念的な知識を丸暗記するのではなく、理解して暗記することをお勧めします。

java 重载(overload)与重写(override)详解及实例

まず私の定義をさせてください:

オーバーロード: 同じクラスまたは継承関係のあるクラス内で、同じ名前と異なるパラメーターを持つメソッドのグループ。エッセンスはさまざまなメソッドに付けられた名前です。

オーバーライド: 継承関係のある 2 つのクラス間で、親クラスに存在するメソッドがサブクラスで再定義されます。本質は、同じメソッドに異なる実装を提供することです。

まずオーバーロードの例を見てみましょう:

public class OverloadParent{
 
  public String getPerson(String name){
 
    return “personA” + name;
 
  }
 
   
 
  public String getPerson(int age){
 
    return “personB” ;
 
  }
 
   
 
  public String getPerson(String name,int age){
 
    return “personC”;
 
  }
 
   
 
  public void getPerson(String name){
 
    System.out.println(“我是重载的方法吗?”);
 
  }
 
}
ログイン後にコピー
public class OverloadChildextends OverloadParent {
 
  public void getPerson(double money){
 
     Sytem.out.println(“我是重载的方法吗”);
 
  }
 
}
ログイン後にコピー

注意:

(1) OverloadParent には同じ名前のメソッドが 4 つあります

(2) 最初の 3 つのメソッドのパラメーターの型と数は矛盾しており、戻り値は一貫しており、オーバーロードを構成します

(3) メソッド 4 とメソッド 1 は戻り値が異なるだけであり、これはオーバーロードを構成せず、コンパイラーはそれを渡しません。

メソッドを呼び出すときに、「戻り値が xxx であるメソッドを呼び出したい」という指定はメソッドのオーバーロードの機能にはなりません。

(4) OverloadParent は Demo を継承し、Demo 内のすべてのメソッドを持ちます。既存の方法ではニーズを満たすことができないと感じたため、単純に過負荷になっていました。

オーバーロードのフラグ: メソッド名は同じですが、パラメーターは異なります (数値または型)。戻り値とは関係がありません。

オーバーライドの例を見てみましょう:

public class OverrideParent{
 
   public void fly(){
 
     System.out.println(“Ican fly!”);
 
  }
 
}
ログイン後にコピー
public class OverrideChild extends OverrideParent{
 
  @override
 
  public void fly(){
 
       System.out.println(“Ican't fly, but I can run!”);
 
  }
ログイン後にコピー
public static vid main(String[] args){
 
       OverwriteParent child= new OverwriteChild();
 
       child.fly();
 
  }
 
}
ログイン後にコピー

OverrideChild の main メソッドが実行されると何が出力されるでしょうか?

答えは次のとおりです: 飛ぶことはできませんが、走ることはできます!

わかります:

(1) OverrideChild と OverrideParent の両方に fly メソッドがあります

(2) fly の戻り値と修飾子は同じです。メソッド本体のみが異なります

(3) サブクラスの fly メソッドの前に @overwrite アノテーションがあります。これは jdk1.5 で使用され、クラスの継承にのみ使用されます。1.6 はインターフェイスの実装に使用できます。このアノテーションはコンパイラのチェックに役立ち、省略できます。

オーバーライドフラグ: 子は親クラスを継承し、同じメソッドの異なる実装を持ちます。

アプリケーション シナリオ

オーバーロード: メソッドに同様の機能があるが、異なるパラメーターを渡す必要がある場合。类

: サブクラスには独自の動作があり、親クラスの継承では独自のニーズを満たすことができません。

PS: オーバーロードと上書きはどちらもポリモーフィズムの現れで​​す。前者はコンパイラポリモーフィズム、後者はランタイムポリモーフィズムです。読んでいただきありがとうございます。皆さんのお役に立てれば幸いです。このサイトへのサポートに感謝します。

🎜 Java のオーバーロードとオーバーライドの詳細な説明と例については、PHP 中国語 Web サイトに注目してください。 🎜
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート