1. 고래와 소

흥미로운 동물학적 사실이 있습니다. 소는 예를 들어 하마보다 고래에 훨씬 더 가깝습니다. 소와 고래는 비교적 가까운 친척이라는 것이 밝혀졌습니다.

이봐. OOP 의 또 다른 매우 강력한 도구인 다형성 에 대해 이야기해 봅시다 . 네 가지 기능이 있습니다.


2. 상속은 만병통치약이 아니다

Cow게임을 위한 클래스를 작성했다고 상상해 보십시오 . 많은 필드와 메서드가 있습니다. 이 클래스의 객체는 걷기, 먹기, 잠자기 등 다양한 일을 할 수 있습니다. 소는 또한 걸을 때 울리는 종을 달고 있습니다. 가장 작은 세부 사항까지 클래스의 모든 것을 구현했다고 가정합니다.

그런 다음 고객이 와서 모든 작업이 바다에서 일어나고 주인공이 고래인 새로운 게임 레벨을 출시하고 싶다고 말합니다.

당신은 Whale수업을 설계하기 시작했고 그것이 수업과 약간만 다르다는 것을 깨닫습니다 Cow. 두 클래스의 논리는 매우 유사하며 상속을 사용하기로 결정합니다.

자바의 다형성

Cow클래스는 부모 클래스의 역할을 수행하기에 이상적입니다. 필요한 모든 변수와 메서드가 있습니다. 우리가 해야 할 일은 고래에게 헤엄칠 수 있는 능력을 부여하는 것뿐입니다. 하지만 문제가 있습니다. 고래는 다리, 뿔, 종을 가지고 있습니다. 결국 이 기능은 Cow클래스 내에서 구현됩니다. 여기서 무엇을 할 수 있습니까?

자바의 다형성.  계승

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");
   }
}
  • 여기에는 두 개의 클래스가 정의되어 있습니다 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클래스를 상속하고 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");
   }
}
우리는 오래된 방법에 대해 모릅니다.