オブジェクト指向プログラミングでは、ポリモーフィズムは、異なるオブジェクトが同じメッセージに異なる方法で応答できるようにする重要な概念です。この記事では、ポリモーフィズムの概念とその応用、および Java でポリモーフィズムを実装する方法について詳しく説明します。
1. 修飾子とアクセス権
Java では、修飾子を使用してメンバーのアクセス権を設定できます。一般的な修飾子は、public、private、protected、default (何も書き込まない) です。
- public: パブリックであり、どこからでもアクセスできることを示します。
- private: プライベートであり、このクラス内でのみアクセスできることを示します。
- protected: 保護されていて、同じパッケージおよびサブクラス内でアクセスできることを示します。
- デフォルト: デフォルトのアクセス許可を示します。同じパッケージ内でのみアクセスできます。
概要: クラスはパブリック、メンバー変数はプライベート、メンバー メソッドはパブリックに設定する必要があります。
2. ポリモーフィズムの概念
ポリモーフィズムはオブジェクト指向プログラミングにおける重要な機能であり、複数の形式が存在するという形で現れます。実生活でも、学生、従業員、子供、兄など、さまざまな形態のポリモーフィズムの例を見つけることができます。
コード内でポリモーフィズムを実現するための条件は次のとおりです。
a. 親子関係が存在する必要があります。
b. メソッドの書き換えが必要です。
c. スーパータイプの参照は、サブタイプのオブジェクトを指します。
class Animal {
void eat() {
System.out.println("Animal is eating");
}
}
class Cat extends Animal {
@Override
void eat() {
System.out.println("Cat is eating");
}
}
class Dog extends Animal {
@Override
void eat() {
System.out.println("Dog is eating");
}
}
public class PolymorphismExample {
public static void main(String[] args) {
Animal a = new Cat(); // 向上造型
a.eat(); // 输出:Cat is eating
a = new Dog(); // 向上造型
a.eat(); // 输出:Dog is eating
}
}
3. ポリモーフィズムの使用
ポリモーフィズムを使用すると、次の現象が観察されます。
- メンバー変数: 何が指摘できるか? 参照のタイプを確認し、実行結果の参照のタイプを確認します。コンパイルして左を確認し、実行して左を確認します。
- 会員方式:何を指摘できるのか?参照のタイプに注目してください。実行結果はオブジェクトのタイプによって異なります。コンパイルして左側を確認し、実行して右側を確認します。
4. 多態性の問題と解決策
ポリモーフィズムを使用する場合の問題は、サブクラス固有のメンバーにアクセスできないことです。ダウンキャスト (キャストとも呼ばれる) は、サブクラスに固有のメンバーにアクセスする場合に実行されます。
Animal ani = new Cat(); // 向上造型
// 不能访问Cat类特有的成员,编译报错
// ani.catchMouse();
// 向下造型,转为Cat类型
if (ani instanceof Cat cat) {
cat.catchMouse(); // 调用Cat类特有的方法
}
なお、ダウンキャストの際には、ClassCastException、つまりデータ型変換例外が発生する場合がある。したがって、型変換を行う前に判断するのが最善であり、instanceof
キーワードを使用してオブジェクトの型を判断できます。
if (ani instanceof Cat cat) {
// 执行Cat类型的操作
} else {
// 执行其他类型的操作
}
5. ポリモーフィズムの意味
ポリモーフィズムを使用すると、コードがより柔軟になり、さまざまなサブクラス オブジェクトを親クラス参照に割り当てて、より一般的なコードを実現できます。ポリモーフィズムを通じて、より簡潔で拡張しやすいプログラムを作成できます。
オブジェクト指向プログラミングでは、ポリモーフィズムは非常に重要な機能であり、これによりコードがより柔軟になり、保守と拡張が容易になります。同時に、ポリモーフィズムの適用は、オブジェクト指向プログラミングの核となるアイデアも具体化しています。カプセル化、継承、ポリモーフィズムの組み合わせにより、コードがより読みやすく、保守しやすくなります。この記事の分析が、Java でのポリモーフィズムの実装をよりよく理解し、使用するのに役立つことを願っています。