Java を勉強しているときに、ポリモーフィズムの概念に出会いました。私は、実際の使用法を掘り下げる前に基本原則を理解する傾向があるため、ここに私の解釈を文書化しました。
ポリモーフィズムの本来の意味は「多様性」です。ただし、この記事の文脈では、クラス継承またはインターフェイス実装による関係がある限り、エラーを引き起こすことなく、変数が異なる型のオブジェクトを保持できる機能を指します。
一般に、変数の型は、変数が参照するオブジェクトの型と一致します。
Animal animal = new Animal();
ただし、オブジェクトがクラスを拡張する場合、変数はスーパークラスの型として扱うことができます。
Animal animal = new Dog(); // Dog extends Animal
さらに、オブジェクトがインターフェースを実装している場合、それをインターフェース型として扱うことができます。
// Interface definition interface Animal { void makeSound(); // Method in the interface } // Classes implementing the interface class Dog implements Animal { public void makeSound() { System.out.println("Woof!"); // Dog-specific implementation } } class Cat implements Animal { public void makeSound() { System.out.println("Meow!"); // Cat-specific implementation } } // Main method public class Main { public static void main(String[] args) { // Assign objects to variables of the interface type Animal myDog = new Dog(); Animal myCat = new Cat(); // Call the interface method myDog.makeSound(); // Outputs "Woof!" myCat.makeSound(); // Outputs "Meow!" } }
これにより、異なるクラスを同じ型として扱うことができ、柔軟なコーディングが可能になります。
変数の型とオブジェクトの型がどのように異なるかを議論していると、「型」とは正確には何なのかという疑問が生じます。私の分析に基づいて、型は次の目的を果たすと結論付けました:
前の例を参照:
Animal animal = new Dog(); // Dog extends Animal
これは、メモリが Dog に割り当てられるが、変数は内容を Animal として解釈することを意味します。コンセプトは次のように視覚化できます:
タイプはフィルター レンズのように機能し、データがどのように認識されるかを決定します。レンズを変更することで、スーパークラス内の一般的なメソッドやインターフェイスを介した特定のメソッドに焦点を当てることができます。
ポリモーフィズムの利点はクラス間で共通のメソッドを処理できることであるのに、なぜ常にスーパークラスで変数を宣言しないのかと不思議に思う人もいるかもしれません。その理由は、このような場合、メモリはスーパークラスのデータにのみ割り当てられるためです。
サブクラスをスーパークラスにキャスト (アップキャスト) することは可能ですが、その逆は当てはまりません。これは、サブクラスにはスーパークラスのデータに加えて独自の一意のデータが含まれるためです。したがって、メモリはサブクラスに事前に割り当てられ、アップキャストを通じてサブクラス固有のメソッドを使用できるようになります。
インターフェイスは型としても機能し、オブジェクトのメモリに格納されているデータを処理するためのフィルター レンズとしての役割は、概念的にはクラスの役割と似ています。インターフェイスを通じて呼び出されるメソッドは、変数の型 (動的バインディング) ではなく、オブジェクトの型によって決まります。これは、変数の型が単にフィルターとして機能し、フィルターされたデータを利用できるという考えを強化します。
ポリモーフィズムは、個々の特性を活用しながら共通のプロセスを統合する必要があるシナリオで役立ちます。探索を通じて、オブジェクトのメモリ レイアウトはその型によって決定される一方で、変数の型がそのメモリの解釈方法を制御するということをより深く理解できました。これは私にとって重要な認識でした。
以上がポリモーフィズムとは何ですか? Java での型とオブジェクトの関係の探索の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。