수색…


소개

다형성은 OOP (Object Oriented Programming) 의 기본 개념 중 하나입니다. 다형성의 주요 개념은 객체가 다른 형태를 취할 수 있다는 것입니다. 이를 달성하기 위해 (다형성), 우리는 크게 두 가지 접근 방식을 사용합니다.

  1. 메소드 오버로딩

    • 이름이 같고 입력 매개 변수가 다른 두 개 이상의 메소드가있는 경우에 발생합니다. 반환 유형은 동일한 이름을 가진 모든 메소드에 대해 동일해야합니다.
  2. 메소드 재정의

    • 자식 객체가 동일한 메소드 정의 (같은 이름의 같은 이름)를 사용하지만 구현이 다른 경우에 발생합니다.

이 두 가지 접근법을 사용하여 동일한 방법 / 기능을 사용하여 다르게 행동 할 수 있습니다. 다음 예제에서 이에 대한 자세한 내용을 살펴 보겠습니다.

메서드 오버로딩

메소드 오버로딩은 클래스 내에서 다형성을 사용하는 방법입니다. 우리는 동일한 클래스 내에서 여러 입력 매개 변수를 사용하여 둘 이상의 메소드를 가질 수 있습니다.

입력 매개 변수의 차이는 다음 중 하나 일 수 있습니다.

  • 매개 변수의 수
  • 매개 변수 유형 (데이터 유형)
  • 매개 변수 순서

별도로 살펴 보도록하겠습니다. (자바에있는이 예제는 더 익숙합니다 - 죄송합니다) :

  1. 매개 변수의 수

     public class Mathematics { 
         public int add (int a, int b) {
             return (a + b);
         }
    
         public int add (int a, int b, int c) {
             return (a + b + c); 
         }
    
         public int add (int a, int b, int c, int c) {
             return (a + b + c + d);
         }
     }
    

    - 당신은 메서드의 반환 형식이 동일 볼 수 있습니다,주의 깊게 봐 int 하지만 입력 횟수가 다른 이러한 방법 theree. 이를 다른 수의 매개 변수로로드하는 메소드로 불립니다.

    추신 : 이것은 단지 예일 뿐이며, 이와 같은 추가 기능을 정의 할 필요가 없습니다.

  1. 매개 변수 유형

    public class Mathematics { 
        public void display (int a) {
            System.out.println("" + a);
        }
    
        public void display (double a) {
            System.out.println("" + a);
        }
    
        public void display (float a) {
            System.out.println("" + a);
        }
    }
    

    모든 메소드는 동일한 이름과 동일한 리턴 유형을 가지며 입력 데이터 유형이 다릅니다.

    추신 : 이 예제는 단지 목적을 설명하기위한 것입니다.

  1. 매개 변수 순서

    public class Mathematics {
        public void display (int a, double b) {
            System.out.println("Numbers are " + a + " and " + b);
        }
    
        public void display (double a, int b) {
            System.out.println("Numbers are " + a + " and " + b);
        }
    }
    

    추신 : 이 예제는 또한 목적을 설명하기위한 것입니다.

메서드 재정의

메소드 오버라이드는 클래스 간의 다형성을 사용하는 방법입니다. 하나의 클래스가 다른 클래스로부터 상속받은 경우, 이전 (하위 클래스)은 후자의 (수퍼 클래스) 메소드를 무시하고 구현을 변경할 수 있습니다.

이것은 수퍼 클래스가 메소드의보다 일반적인 구현을 정의하는 반면에 서브 클래스는 좀 더 구체적인 메소드를 사용하는 경우에 사용됩니다.

다음 예제를 고려하십시오.

포유류를위한 수업이 있습니다.

class Mammal {
  void whoIam () {
    System.out.println("I am a Mammal");
  }
}

그 다음 우리는 포유류 인 개를위한 수업을 가지고 있습니다.

class Dog extends Mammal {
  @Override
  void whoIam () {
    super.whoIam();
    System.out.println("I am a Dog!");
  }
}

이 예제에서는 Mammal 클래스에서 whoIam() 메서드를 정의합니다. 포유류가 포유류라고합니다. 그러나 이것은 많은 포유류가 있기 때문에 일반적인 용어입니다. 그런 다음 Dog Mammal 인 것처럼 Mammal 클래스에서 Dog 클래스를 상속받을 수 있습니다. 그러나 더 구체적으로 말하면 개는 포유류뿐만 아니라 개입니다. 그러므로 개는, I am a Mammal 이고 또한 I am a Dog 개라고해야합니다. 그러므로 하위 클래스 ( Dog 클래스)의 수퍼 클래스 ( Mammal 클래스, 즉)에서 whoIam() 메서드를 재정 의 할 수 있습니다.

Java에서 super.whoIam() 을 사용하여 수퍼 클래스의 메서드를 호출 할 수도 있습니다. 그러면 Dog 는 개처럼 행동하고 포유 동물처럼 행동합니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow