OOP의 세 가지 특징: 다형성

다형성:



마지막으로 POLYMORPHISM 섹션에 대해 쓰기 시작합니다. 이 섹션에서는 Java의 세 가지 주요 기능에 대한 핵심 지식에 훨씬 더 익숙해져야 합니다.

상속은 아마도 코드에서 가장 인기 있는 것은 아니지만 프로그래밍에서 가장 중요한 부분일 것입니다(적어도 저는 XD라고 생각합니다).

1. 다형성이란 무엇입니까?

다형성은 다른 표현을 갖는 객체의 구현입니다.

예를 들어, 다른 응용 프로그램에서 동일한 버튼 "ENTER"를 누르면 컴퓨터는 연기와 같은 다른 반응을 표시합니다.
Word 응용 프로그램의 "줄 바꿈"기능, 채팅 상자에 텍스트를 입력한 후 "보내기"기능 실행 등. 동일한 기능을 호출하는 것처럼 "ENTER"버튼을 누르는 것은 다른 응용 프로그램에서 다른 역할을 합니다. 이것도 다형성의 일종입니다.

2. 다형성의 의의 :
  • 클래스 간 결합 제거
  • 교체 가능
  • 확장성
  • 인터페이스로 작동(Java에서 실제interface처럼)
  • 유연성
  • 심플함

  • 모든 의미를 설명하기 전에 알아야 할 다형성의 존재에 필요한 세 가지 조건이 있습니다.
  • 상속의 구현: 보시다시피 다형성의 구현은
  • 의 구현이기도 합니다.
  • 오버라이드
  • 아버지 클래스의 참조가 하위 클래스의 객체를 가리킴: Parent p = new Child();

  • 이제 프로그램에 수업이 있습니다.


    그리고 다음과 같은 코드가 있습니다.

    class Shape {
        void draw() {}// is overridden
    }
    
    class Circle extends Shape {
        void draw() {//override function draw() of class Shape
            System.out.println("Circle.draw()");
        }
    }
    
    class Square extends Shape {
        void draw() {//override function draw() of class Shape
            System.out.println("Square.draw()");
        }
    }
    
    class Triangle extends Shape {
        void draw() {//override function draw() of class Shape
            System.out.println("Triangle.draw()");
        }
    }
    


    메소드가 다형성 모드에서 호출되면 먼저 메소드가 상위 클래스에 존재하는지 확인합니다. 그렇지 않으면 컴파일 오류가 발생합니다. 그렇다면 하위 클래스에서 같은 이름의 메서드를 호출합니다. 상위 클래스와 같은 이름의 하위 클래스에서 함수를 호출했지만 결과가 다른 현상을 오버라이드(Override)라고 합니다.



    이러한 6가지 장점을 보여주는 가장 좋은 방법은 다음 코드를 살펴보는 것입니다.

    abstract class Animal {// Abstraction
        abstract void eat();
    }
    
    class Cat extends Animal {
        public void eat() {// Interface
            System.out.println("Eat fish.");
        }
        public void work() {
            System.out.println("Catch mouse.");
        }
    }
    
    class Dog extends Animal {
        public void eat() {
            System.out.println("Eat bone.");
        }
        public void work() {
            System.out.println("Guard.");
        }
    }
    
    public class Test {
    
        public static void main(String[] args) {
            show(new Cat());  // Invoke the show() through the object of class Cat
            show(new Dog());  // Invoke the show() through the object of class Cat
    
            Animal a = new Cat();  // Upcasting
            a.eat();               // Invoke eat() of class Cat
            Cat c = (Cat)a;        // Downcasting
            c.work();        // Invoke work() of class Cat
        }
    
        public static void show(Animal a)  {
            a.eat();
            // Judging the class type
            if (a instanceof Cat)  {  // What a cat does
                Cat c = (Cat)a;
                c.work();
            } else if (a instanceof Dog) { // What a dog does
                Dog c = (Dog)a;
                c.work();
            }
        }
    }
    


    출력을 볼 수 있습니다.

    Eat fish.
    Catch mouse.
    Eat bone.
    Guard.
    Eat fish.
    Catch mouse.



    3. 다형성 구현 방법:
  • 1. 재정의:

  • 다형성에 대한 재정의가 있습니다.

    하위 클래스에서 재정의할 수 있는 메서드인 메서드 재정의에 대해 이미 논의했습니다.

    하위 클래스 객체가 재정의된 메서드를 호출하면 슈퍼클래스의 재정의된 메서드가 아니라 하위 클래스의 메서드가 호출됩니다.

    부모 클래스에서 재정의된 메서드를 호출하려면 super 키워드를 사용해야 합니다.
  • 2. 인터페이스

  • Java의 인터페이스는 메소드 특성의 모음이지만 메소드 구현이 없는 삶의 인터페이스와 유사합니다. 자세한 내용은 Java Interfaces 섹션을 참조하십시오.
  • 3. 추상 클래스 및 추상 함수(vitural function)

  • 다형성을 위한 가상 함수도 존재합니다.

    물론 다형성의 구현은 클래스 간의 상호 작용에 관한 것만은 아닙니다. 또한 abstract function()abstract class {}에 의해 구현될 수 있습니다(C++의 vitural func()와 유사).


    마지막으로 중요한 것은


    abstractoverride의 이러한 개념은 다른 블로그에서 작성할 수 있습니다. 하지만 이 블로그는 저의 첫 번째 블로그입니다. DEV 커뮤니티 회원들로부터 피드백과 조언을 받고 다시 앞으로 나아갈 수 있기를 바랍니다.

    여러분의 조언과 댓글은 제가 앞으로 나아가는 힘입니다. 읽어주셔서 감사합니다.

    자신을 밀어붙이지 않으면 얼마나 잘 될지 결코 알 수 없습니다.
    리키 루안:

    이메일: [email protected]

    좋은 웹페이지 즐겨찾기