「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > ポリモーフィズムとは何ですか? Java での型とオブジェクトの関係の探索

ポリモーフィズムとは何ですか? Java での型とオブジェクトの関係の探索

2024 年 12 月 21 日に公開
ブラウズ:279

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 として解釈することを意味します。コンセプトは次のように視覚化できます:

What Is Polymorphism? Exploring Type-Object Relations in Java

A タイプはフィルター レンズのように機能し、データがどのように認識されるかを決定します。レンズを変更することで、スーパークラス内の一般的なメソッドやインターフェイスを介した特定のメソッドに焦点を当てることができます。

常にスーパークラスで宣言しないのはなぜでしょうか?

ポリモーフィズムの利点がクラス間で共通のメソッドを処理できることであるのに、なぜ常にスーパークラスで変数を宣言しないのかと不思議に思う人もいるかもしれません。その理由は、このような場合、メモリはスーパークラスのデータにのみ割り当てられるためです。

What Is Polymorphism? Exploring Type-Object Relations in Java

サブクラスをスーパークラスにキャストすることは可能ですが (アップキャスト)、その逆は当てはまりません。これは、サブクラスにはスーパークラスのデータに加えて独自の一意のデータが含まれるためです。したがって、メモリはサブクラスに事前に割り当てられ、アップキャストを通じてサブクラス固有のメソッドを使用できるようになります。

インターフェースの場合

インターフェイスはタイプとしても機能し、オブジェクトのメモリに格納されているデータを処理するためのフィルター レンズとしての役割は、概念的にはクラスの役割と似ています。インターフェイスを通じて呼び出されるメソッドは、変数の型 (動的バインディング) ではなく、オブジェクトの型によって決まります。これは、変数の型が単にフィルターとして機能し、フィルターされたデータを利用できるようにするという考えを強化します。

結論

ポリモーフィズムは、個々の特性を活用しながら共通のプロセスを統合する必要があるシナリオで役立ちます。探索を通じて、オブジェクトのメモリ レイアウトはその型によって決定される一方、変数の型はそのメモリがどのように解釈されるかを制御するということをよりよく理解しました。これは私にとって重要な認識でした。

リリースステートメント この記事は、https://dev.to/yo-shi/what-is-polymorphism-exploring-type-and-object-relations-nmh?1で再現されています。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3