1. クジラと牛

ここに動物学的に興味深い事実があります。牛は、たとえばカバよりもクジラにはるかに近いのです。牛とクジラは比較的近い親戚であることがわかりました。

ここを見て。OOPのもう 1 つの非常に強力なツールであるポリモーフィズムについて説明しましょう。4つの特徴があります。


2. 相続は万能薬ではない

Cowゲーム用のクラスを作成したと想像してください。多くのフィールドとメソッドがあります。このクラスのオブジェクトは、歩く、食べる、寝るなどのさまざまな動作を実行できます。牛も歩くときに鳴る鈴を付けています。クラス内のすべてを細部まで実装したとします。

そして、クライアントがやって来て、すべてのアクションが海で行われ、主人公がクジラである新しいゲーム レベルをリリースしたいと言いました。

クラスの設計を開始するWhaleと、それがクラスとわずかに異なるだけであることがわかりますCow。両方のクラスのロジックは非常に似ているため、継承を使用することにします。

Javaのポリモーフィズム

このCowクラスは、親クラスの役割を担うのに理想的です。必要な変数とメソッドがすべて含まれています。私たちがしなければならないのは、クジラに泳ぐ能力を与えることだけです。しかし、問題があります。クジラには足、角、鐘が付いています。結局のところ、この機能はCowクラス内に実装されています。ここで何ができるでしょうか?

Java におけるポリモーフィズム。 継承

3. メソッドのオーバーライド

メソッドのオーバーライドが役に立ちます。継承したメソッドが新しいクラスで期待どおりに動作しない場合は、そのメソッドを別のメソッドに置き換えることができます。

メソッドのオーバーライド

これはどのように行われるのでしょうか? 子孫クラスでは、オーバーライドする親クラスのメソッドと同じメソッドを宣言します。そこに新しいコードを書きます。それだけです。あたかも親クラスの古いメソッドが単に存在していないかのようです。

仕組みは次のとおりです。

コード 説明
class Cow
{
   public void printColor ()
   {
      System.out.println("I'm a white whale");
   }

   public void printName()
   {
      System.out.println("I'm a cow");
   }
}

class Whale extends Cow
{
   public void printName()
   {
      System.out.println("I'm a whale");
   }
}
  • ここでは 2 つのクラスが定義されています -CowそしてWhale
  • Whale継承するCow
  • クラスはメソッドをWhaleオーバーライドしますprintName()
public static void main(String[] args)
{
   Cow cow = new Cow();
   cow.printName();
}
このコードは、画面に次のテキストを表示します。
I'm a cow
public static void main(String[] args)
{
   Whale whale = new Whale();
   whale.printName();
}
このコードにより、画面に次の内容が表示されます。
I'm a whale

クラスを継承してメソッドCowをオーバーライドするとprintNameWhaleクラスには実際に次のデータとメソッドが含まれます。

class Whale
{
   public void printColor()
   {
      System.out.println("I'm a white whale");
   }

   public void printName()
   {
      System.out.println("I'm a whale");
   }
}
私たちは古い方法については知りません。