Javaポリモーフィズムの分析

Javaポリモーフィズム

今日は、Javaのポリモーフィズムについて話しましょう。オブジェクト指向の主要な機能として、その重要性は言うまでもありません。他の2つの機能(継承とカプセル化)と比較すると、文字通り読むのは少し難しく、複数の態度が依然としてあります。異常な?

公式ソリューション

公式説明:

ポリモーフィズムは、同じ行動の複数の異なる症状または形態を持つ能力です。

ポリモーフィズムは同じインターフェースであり、異なるインスタンスを使用して異なる操作を実行します。

簡単に理解すると、同じメソッドが異なるクラス(継承関係)で異なる実装を持っているか、親クラスの参照がサブクラスオブジェクトを指しているということです。

ここに公式の図を添付します:

ここに画像の説明を挿入

図に示すように、プリンターには印刷機能がありますが、プリンターが異なれば、シナリオやニーズごとに異なる効果(色、黒など)を印刷できます。

さらに:たとえば、銀行カードを持っていて、カウンターでお金を引き出す必要がある場合は、友人や親戚に銀行カードを提出して手伝ってもらえますが、その過程でお金を引き出すことができます。お金を引き出す、カウンターやATMの担当者はあなたがカードを持っていることを知りません。このプロセスは多形性のプロセスです。

ポリモーフィズムの利点

ポリモーフィズムとは何かを理解したので、次に、ポリモーフィズムが何に使用されるか、つまり、ポリモーフィズムの利点は何かを理解する必要があります。

  • 再利用性:

    プログラムを作成するときは、サブクラスごとに同じメソッドや関数を作成する必要はなく、抽象親クラスを処理するだけで済みます。

  • スケーラビリティと保守性を向上させます。

    サブクラスの関数は、親クラスのメソッドまたは参照変数によって呼び出すことができます。

存在のための必要条件

  • 継承または実現

  • リライト

  • 親クラス参照は、子クラスオブジェクトを指します。例:Parent p = new Child();

    上記の3つの必要条件を同時に満たす必要があります。ポリモーフィックメソッドを使用してメソッドを呼び出す場合は、最初にメソッドが親クラスにあるかどうかを確認する必要があります。そうでない場合、コンパイルエラーが発生します。

    その場合は、サブクラスで同じ名前のメソッドを呼び出します。

形式:親クラス変数名=新しいサブクラス

変数名。メソッド名()

public class Dad {
    
    
    void method() {
    
    
        System.out.println("我是父亲");
    }
}

class Son extends Dad {
    
    
    @Override
        //实现重写父类的method()方法
    void method() {
    
    
        System.out.println("我是儿子");
    }
    void play(){
    
    
        System.out.println("打篮球");
    }
}

class Dau extends Dad {
    
    
    @Override
        //实现重写父类的method()方法
    void method() {
    
    
        System.out.println("我是女儿");
    }
}

class test {
    
    
    //实现多态,父类的引用指向子类对象
    public static void main(String[] args) {
    
    
        Dad dad = new Son();
        //父类       子类
        dad.method();

        dad = new Dau();
        dad.method();
    }
}

出力結果:

私は息子です
私は娘です

参照データ型の変換

参照データ型の変換は、上向き変換と下向き変換の2つのタイプに分けられます。

  • アップキャストとは、ポリモーフィズムを実現するために、サブクラス参照型を親クラス参照型に自動的に変換することです。
  • ダウンキャストとは、親クラスの参照型をサブクラスの参照型に強制することです。これは、サブクラスの一意のメソッドを呼び出すことです。

上記のコードは上向きの変換であり、ポリモーフィズムを実現します。

class test {
    
    
    //向下转型,调用Son的方法
    public static void main(String[] args) {
    
    
        Dad dad = new Son();
        Son s = (Son) dad;
        //子类              父类
        s.play();
    }
}

出力結果:

バスケットボールをする

上記のコードは下向きの変換であり、サブクラスの一意のplayメソッドを呼び出します。


おすすめ

転載: blog.csdn.net/ITMuscle/article/details/111054766