ホームページ  >  記事  >  Java  >  Java オブジェクト指向 - ポリモーフィズムの詳細な紹介

Java オブジェクト指向 - ポリモーフィズムの詳細な紹介

王林
王林転載
2019-11-30 14:21:333006ブラウズ

Java オブジェクト指向 - ポリモーフィズムの詳細な紹介

1. 概要

ポリモーフィズムは、カプセル化と継承に続くオブジェクト指向の 3 番目の主要な機能です。

たとえば、人生において、走る動き、子猫、子犬、象では走り方が異なります。もう一つの例は飛行の動きで、昆虫、鳥、飛行機も飛行方法が異なります。同じ行動が、異なる物事を通じて異なる形で現れることがわかります。ポリモーフィズムはこの状態を説明します。

ポリモーフィズム:

は、複数の異なる表現を持つ同じ動作を指します。

前提条件 [重要なポイント]

1. 継承または実装 [2 つのうちの 1 つを選択]

2. メソッドを書き換える [意味: 重要ではありません]書く、意味なし]

3. 親クラスの参照はサブクラス オブジェクトを指します [フォーマット リフレクション]

無料のオンライン学習ビデオの推奨: java ビデオ

2. ポリモーフィック マニフェスト

ポリモーフィック マニフェストの形式:

父类类型 变量名 = new 子类对象; 
变量名.方法名();
親クラス タイプ: サブクラス オブジェクトによって継承された、または実装された親クラス タイプを指します。親インターフェイスのタイプ。

コードは次のとおりです:

Fu f = new Zi(); 
f.method();

ポリモーフィズムを使用してメソッドを呼び出すときは、まずそのメソッドが親クラスに存在するかどうかを確認します。そうでない場合は、コンパイル エラーが発生します。そうである場合は、サブクラスのオーバーライドされたメソッドが実行されます。

コードは次のとおりです:

親クラスを定義します:

Java オブジェクト指向 - ポリモーフィズムの詳細な紹介

サブクラスを定義します:

Java オブジェクト指向 - ポリモーフィズムの詳細な紹介

#テスト クラスの定義:

Java オブジェクト指向 - ポリモーフィズムの詳細な紹介

3. ポリモーフィズムの利点

実際の開発プロセス メソッドでは、親クラスの型をメソッドの仮パラメータとして使用して、サブクラスのオブジェクトをメソッドに渡してメソッドを呼び出します。これにより、ポリモーフィズムのスケーラビリティと利便性がよりよく反映されます。

コードは次のとおりです:

親クラスを定義します:

Java オブジェクト指向 - ポリモーフィズムの詳細な紹介

サブクラスを定義します:

Java オブジェクト指向 - ポリモーフィズムの詳細な紹介

#テスト クラスの定義:

public class Test {
    public static void main(String[] args) {
        // 多态形式,创建对象
        // Cat c = new Cat();
        // Dog d = new Dog();

        // 调用showCatEat showCatEat(c);
        // 调用showDogEat
        showDogEat(d);

        /*
        以上两个方法, 均可以被showAnimalEat(Animal a)方法所替代而执行效果一致
        */
        showAnimalEat(c);
        showAnimalEat(d);
    }

    public static void showCatEat(Cat c) {
        c.eat();
    }

    public static void showDogEat(Dog d) {
        d.eat();
    }

    public static void showAnimalEat(Animal a) {
        a.eat();
    }
}

eat メソッドが実行されると、ポリモーフィズムにより、サブクラスによって書き換えられたメソッドが実行されることが規定されているため、その効果は当然ながら showCatEat および showDogEat メソッドと一致します。したがって、showAnimalEat は上記の 2 つのメソッドを完全に置き換えることができます。

置き換えだけでなく、スケーラビリティの観点からも、今後サブクラスがどれだけ登場しても、showXxxEatメソッドを記述する必要はなく、直接showAnimalEatを使用して完了することができます。

つまり、ポリモーフィズムの利点は、プログラムの記述が容易になり、拡張性が優れていることです。

4. 参照型変換

ポリモーフィック変換は、上方変換と下方変換の 2 種類に分けられます。 ##アップキャスト

アップキャスト: ポリモーフィズム自体は、サブクラス型を親クラス型にアップコンバートするプロセスです。このプロセスがデフォルトです。 親クラス参照がサブクラス オブジェクトを指す場合、それは上向き変換です。

使用形式:

父类类型 变量名 = new 子类类型(); 
如:Animal a = new Cat();

ダウンキャスティング

親クラス型をサブクラス型にダウンコンバートする処理。この処理は必須です。 上方変換されたサブクラス オブジェクトの場合、親クラス参照をサブクラス参照に変換するには、下方変換である強制型変換の形式を使用できます。

使用形式:

子类类型 变量名 = (子类类型) 父类变量名; 
如 :Cat c =(Cat) a;

変換のデモンストレーション、コードは次のとおりです:

クラスの定義:

定義テストクラス:

Java オブジェクト指向 - ポリモーフィズムの詳細な紹介

変換例外Java オブジェクト指向 - ポリモーフィズムの詳細な紹介

转型的过程中,一不小心就会遇到这样的问题,请看如下代码:

Java オブジェクト指向 - ポリモーフィズムの詳細な紹介

这段代码可以通过编译,但是运行时,却报出了ClassCastException,类型转换异常!这是因为,明明创建了Cat类型对象,运行时,当然不能转换成Dog对象的。这两个类型并没有任何继承关系,不符合类型转换的定义。

为了避免ClassCastException的发生,Java提供了 关键字,给引用变量做类型的校验。

格式如下:

变量名 instanceof 数据类型
如果变量属于该数据类型,返回true。
如果变量不属于该数据类型,返回false。

所以,转换前,我们最好先做一个判断,代码如下:

Java オブジェクト指向 - ポリモーフィズムの詳細な紹介

想学习更多相关教程请访问:java入门学习

以上がJava オブジェクト指向 - ポリモーフィズムの詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。