1. Китове и крави

Ето един интересен зоологически факт: кравата е много по-близо до кита, отколкото например до хипопотама. Оказва се, че кравите и китовете са относително близки роднини.

Вижте тук. Нека ви разкажем за полиморфизма — друг много мощен инструмент на ООП . Има четири функции.


2. Наследството не е панацея

Представете си, че сте написали Cowклас за игра. Има много полета и методи. Обектите от този клас могат да правят различни неща: да ходят, да ядат и да спят. Кравите също носят звънец, който звъни, когато ходят. Да предположим, че сте внедрor всичко в класа до най-малкия детайл.

И тогава вашият клиент идва и казва, че иска да пусне ново ниво на играта, в което цялото действие се развива в морето, а главният герой е кит.

Започвате да проектирате Whaleклас и разбирате, че той е само малко по-различен от Cowкласа. Логиката на двата класа е много сходна и вие решавате да използвате наследяване.

Полиморфизъм в Java

Класът Cowе идеален за поемане на ролята на родителски клас: той има всички необходими променливи и методи. Всичко, което трябва да направим, е да дадем на кита способността да плува. Но има проблем: вашият кит има крака, рога и камбана. В крайна сметка тази функционалност е реализирана вътре в Cowкласа. Какво може да се направи тук?

Полиморфизъм в Java.  Наследство

3. Замяна на метода

Замяната на метода ни идва на помощ. Ако сме наследor метод, който не прави точно това, което искаме в нашия нов клас, можем да заменим този метод с друг.

Отмяна на метода

Как става това? В нашия наследствен клас ние декларираме същия метод като метода на родителския клас, който искаме да заменим. Пишем нашия нов code в него. И това е всичко — сякаш старият метод в родителския клас просто не съществува.

Ето How работи:

Код Описание
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");
   }
}
  • Тук са дефинирани два класа - CowиWhale
  • WhaleнаследяваCow
  • Класът Whaleзамества printName()метода
public static void main(String[] args)
{
   Cow cow = new Cow();
   cow.printName();
}
Този code показва следния текст на екрана:
I'm a cow
public static void main(String[] args)
{
   Whale whale = new Whale();
   whale.printName();
}
Този code показва следното на екрана:
I'm a whale

След наследяване на Cowкласа и замяна на printNameметода, Whaleкласът всъщност съдържа следните данни и методи:

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

   public void printName()
   {
      System.out.println("I'm a whale");
   }
}
Не знаем за нито един стар метод.