다형성-단 두 문장으로 정의 [닫기]


85

다른 정의와 설명을 살펴 보았지만 만족스러운 것은 없습니다. 누구나 코드 나 예제를 사용하지 않고 최대 두 문장으로 다형성을 정의 할 수 있는지 확인하고 싶습니다. 나는 '그래서 당신은 사람 / 차 / 캔 오프너를 가지고 있습니다 ...'또는 단어가 어떻게 파생되는지 듣고 싶지 않습니다 (폴리와 모프가 무엇을 의미하는지 아는 사람은 아무도 없습니다). 다형성이 무엇인지 아주 잘 이해하고 영어를 잘 구사한다면이 질문에 조밀하지만 짧은 정의로 대답 할 수 있어야합니다. 당신의 정의가 다형성을 정확하게 정의하지만 너무 조밀해서 몇 번의 읽기가 필요하다면 그것이 바로 제가 찾고있는 것입니다.

왜 두 문장 만? 정의는 짧고 지능적이기 때문입니다. 설명은 길고 예제와 코드가 포함되어 있습니다. 여기에서 설명을 찾으십시오 (해당 페이지의 답변이 제 질문에 만족스럽지 않습니다).

다형성 vs 오버로딩 vs 오버로딩
가능한 한 쉽게 다형성을 설명하십시오.

이 질문을하는 이유는 무엇입니까? 같은 질문을 받았고 만족스러운 정의를 내놓을 수 없다는 것을 알게 되었기 때문입니다 (제 기준으로는 꽤 높음). 나는이 사이트의 위대한 사람이 그것을 할 수 있는지보고 싶다.

두 문장 요구 사항을 실제로 만들 수 없다면 (정의하기 어려운 주제) 넘어가도 괜찮습니다. 아이디어는 실제로 다형성이 무엇인지 정의하고 그것이하는 일이나 사용 방법을 설명하지 않는 정의를 갖는 것입니다 (차이를 얻었습니까?).


하나의 이름, 여러 구현.
Prosunjit Biswas

2
저는 면접에서이 질문을 받았습니다. 나는 면접에서 그것을 묻는 것이 엘리트주의적인 속물 행위라고 느꼈다. 구글 직원은 아무도 그것에 대해 효과적으로 대답 할 수 없다고 뻔뻔스럽게 물었다. 대답 할 수 없어서 일자리를 얻지 못했다면, 당신이 능숙 할 수있는 사람보다 당신이 할 수있는 일에 더 관심이있는 사람들을 위해 일하는 것이 더 나을 것입니다.
MagicLAMP

다형성은 개발 과정에서 이해해야 할 매우 중요한 개념입니다. 나는 공식적인 정의가 아니라면 적어도 그 가치를 이해하는 것이 좋습니다. 나는 전략 패턴의 작동 방식과 그 가치를 최소한 설명 할 수있는 것이 좋습니다.
Chad Johnson

답변:


106

다형성은 어떤 종류의 계약을 표현할 수있게하는데, 잠재적으로 많은 유형이 그 계약을 (클래스 상속을 통해서든 아니든) 각각의 목적에 따라 다른 방식으로 구현합니다. 해당 계약을 사용 하는 코드 는 어떤 구현이 관련되어 있는지 (*) 신경 쓸 필요가 없으며 계약이 준수 될뿐입니다.

(*) 어쨌든 이상적인 경우-분명히 꽤 자주 호출 코드가 매우 신중하게 적절한 구현을 선택했습니다!


1
Mark, 한때이 대답을 받아 들였다가 받아들이지 않았습니까? 나는 평판 시스템에서 버그처럼 보이는 것을 해결하려고 노력하고 있습니다.이 답변은 이상하게도 오늘 하루에 -15 rep의 그물을 얻었습니다.
Jon Skeet

여기도 마찬가지입니다. Jon-이제 -15 rep으로 2 개의 답변을 수락했습니다. 내가 신경 쓰는 것은 아니지만 흥미 롭습니다.
Otávio Décio

3
엄밀히 말하면 "일종의 계약을 표현"할 필요는 없습니다. 실제로 필요한 것은 메시지 발신자가 어떤 구현이 메시지를 처리하는지 알거나 신경 쓸 필요없이 여러 구현이 동일한 메시지에 응답 할 수 있다는 것입니다.
Doug Knesek

3
@Doug : 문서 화나 이름 지정을 통해 암시 된 계약도없는 경우 원하는 작업을 수행 할 것인지 어떻게 알 수 있습니까? 당신은 당신 자신의 대답에서 "인터페이스"에 대해 이야기합니다. – 그것은 저에게 계약과 매우 흡사하게 들립니다 – 차이점은 무엇이라고 생각합니까? "인터페이스"와 "계약"은 모두 "강력한"의미 (예 : 컴파일 타임에 적용) 또는 매우 느슨하게 (예 : 명명 규칙 및 동적 타이핑 사용) 사용할 수있는 단어입니다.
Jon Skeet

1
@Alex : 예, 되돌릴 편집입니다. 제 표현을 선호합니다. 그래도 언제든지 자신의 답변을 추가 할 수 있습니다.
Jon Skeet

72

일반적으로 과일을 먹을 수는 있지만 과일의 종류는 다양합니다. 과일 인 사과는 먹을 수 있습니다 (과일이기 때문에). 바나나도 먹을 수 있지만 (과일이기도하므로) 사과와는 다른 방식입니다. 먼저 껍질을 벗기세요.

글쎄, 적어도 나는 그렇습니다. 그러나 나는 어떤 매너에서 이상해서 무엇을 압니까?

이것은 상속 (과일을 먹을 수 있음), 다형성 (과일을 먹는 것이 모든 종류의 과일을 먹을 수 있음) 및 캡슐화 (바나나에 껍질이 있음)를 보여줍니다.

진지하게, 객체 상속, 다형성, 캡슐화, 가상의 것, 추상적 인 것, 사적인 것, 공개적인 것, 이것들은 모두 어려운 개념입니다. 누군가가 이것에 대한 2 문장 정의를 절대적으로 갖고 싶다면 질문을 코드 골프 변형으로 태그하십시오.이 두 문장은 너무 간결해야하므로 이미 무엇인지 알지 못하면 충분히 배우지 못할 것입니다. 더 자세히 알아야 할 사항을 알 수 있습니다.


lassevk : "이미 무엇인지 알지 못한다면 무엇에 대해 더 많이 배워야하는지 알 수있을만큼 충분히 배우지 못할 것입니다."<< 명확히하기 위해, 그것이 제가 기대하는 바입니다. 이해하는 데 약간의 생각이 필요할 수있는 정의를 찾고 있습니다. 초보자를 가르치는 데 사용되는 것은 아닙니다.
Mark Testa

2
나는 그것을 모아서 약간 유머러스 한 (어쨌든 나에게) 답변을 게시했습니다 :) 다형성과 OOP는 그 큰 벽 중 하나입니다. 학습 곡선을 그래프로 표시하면 큰 벽에 부딪 히고 기어 다닐 수 있습니다. 또는 그렇지 않습니다. 그렇다면 일반적으로 큰 AHA가 있습니다! 경험 ...
Lasse V. Karlsen

8
독 당근도 과일입니다! 한 번만 먹을 수 있습니다!
James Anderson

@JamesAnderson 그래서, 싱글 톤?
Lasse V. Karlsen

47

다형성은 유형을 인식하지 않는 균일 한 인터페이스를 선언하여 구현 세부 사항을 인터페이스를 구현하는 구체적인 유형에 남겨 둡니다.


이것은 놀랍도록 간결하고 완벽하게 맞다고 생각합니다
Alex W

21

Wikipedia : Polymorphism은 균일 한 인터페이스를 사용하여 다양한 데이터 유형의 값을 처리 할 수있는 프로그래밍 언어 기능입니다. 나에게는 매우 간단합니다.


21

사실, 여러 형태의 다형성이 있고 그것에 대해 꽤 많은 논란이 있습니다. 그것을 제대로 정의 할 수없는 CS 교수를 볼 수도 있습니다. 나는 세 가지 유형을 알고 있습니다.

  • 임시 다형성 (오리처럼 보이고 오리처럼 걷는다 => 오리입니다). 예를 들어 Haskell과 Python에서 볼 수 있습니다.

  • 일반 다형성 (여기서 유형은 일반 유형의 인스턴스입니다). 예를 들어 C ++에서 볼 수 있습니다 (int의 벡터와 문자열의 벡터는 모두 멤버 함수 크기를 가짐).

  • 하위 유형 다형성 (유형이 다른 유형에서 상 속됨). 대부분의 OO 프로그래밍 언어에서 볼 수 있습니다 (즉, 삼각형은 모양입니다).


2
다른 유형의 다형성이 있음을 언급 한 +1. 그러나 ad-hoc 다형성에 대한 정의는 en.wikipedia.org/wiki/Type_polymorphism 에서 언급 한 것과 상당히 다른 것 같습니다 . 이 페이지에는 3 가지가 아닌 2 가지 유형 (임시 대 매개 변수)이 있으며 다형성 함수와 다형성 데이터 유형을 구분합니다. 내가 결정할 수있는 한 세 가지 유형은 각각 파라 메트릭 다형성 함수, 파라 메트릭 다형성 데이터 유형 및 임시 다형성 함수에 해당합니다.
Laurence Gonsalves

안녕하세요, "일부 제네릭 유형의 인스턴스"와 "다른 유형에서 상속"의 차이점은 무엇입니까?
Shanimal

@LaurenceGonsalves fwiw, 첫 번째 주석에 제공된 링크는 세 가지 유형을 가리 킵니다. 파라 메트릭 다형성은 함수 또는 데이터 유형이 "일반적으로"작성 될 수 있도록 정의됩니다.
Shanimal

14

이 질문을하는 이유를 정말 이해합니다. 나는 다형성을 이해하지만 면접에서 다형성에 대한 짧고 명확한 정의를 제공하라는 요청을 받았습니다. 명확하고 짧은 정의를 할 수 없었기 때문에 그것에 대해 생각하기 시작했고 여기에 내 정의가 있습니다.

한 유형의 객체가 하나의 동일한 인터페이스를 가지지 만이 인터페이스의 다른 구현을 갖는 기능입니다.


10

정의 :

다형성은 $ 1 아이디어에 대한 $ 10 단어입니다. 즉, 수행 할 작업을 요청할 때 최종 결과가 적절한 한 그것이 어떻게 달성되는지는 신경 쓰지 않습니다. 긴만큼 서비스가 제대로 제공되고, 난 상관 없어 [정보 구현 .

토론

소프트웨어 개발, 특히 객체 지향 원칙에 따라 개발 된 시스템에서 일반적으로 사용되지만 다형성은 기본적으로 실제 원칙이며 기술 용어가 아닌 실제 용어로 정의되어야합니다.

전화를 걸고 싶을 때는 전화를 들고 전화를 걸어 상대방과 통화를합니다. 나는 누가 전화를 만들 었는지, 어떤 기술을 사용하는지, 유선, 무선, 모바일 또는 VOIP인지, 보증 대상인지는 상관하지 않습니다.

문서를 인쇄하고 싶을 때 인쇄합니다. 구현 언어, 프린터 브랜드, 연결 스타일, 소모품 또는 용지 품질에 대해서는 신경 쓰지 않습니다.


5
의 예와 같이 소리 Encapsulation나에게
싱글

1
다형성, 캡슐화 및 추상화는 서로 다른 관점에 초점을 맞추지 만 모두 매우 밀접하게 관련되어 있습니다. 좋은 추상화는 다형성을 더 쉽게 달성 할 수있게하고 좋은 캡슐화는 세부 사항 "누출"을 방지하는 데 도움이됩니다.
Bevan

10

동일한 인터페이스의 여러 구현.

예 : 많은 전화기 모델이 숫자 키패드 인터페이스를 구현합니다.


8

다형성은 객체 모델을 설계 할 때 코드를 단순화하는 데 사용되는 객체 지향 전략입니다. 핵심 다형성은 두 개의 유사하지만 다른 객체를 정의한 다음 두 객체를 동일한 것처럼 취급하는 기능입니다.

알겠습니다 ....


7

다형성이 무엇인지에 대한 나만의 해석을 추가 할 것이라고 생각했습니다. 매우 일반적으로 다형성은 다른 유형의 엔티티에 단일 인터페이스 를 제공하는 행위입니다 .

그것은 다소 일반적이지만 내가 아는 세 가지 유형의 다형성 ( ad hoc , parametricsubtype)을 모두 래핑 할 수있는 유일한 방법 입니다. 아래에서 더 자세히 살펴보고 다형성 유형을 이름별로 알파벳순으로 정렬했습니다. 당신이 관심을 가지고있는 것은 아마도 마지막 것 인 subtype polymorphism 일 것입니다.

임시 다형성

Ad Hoc 다형성 은 다른 매개 변수 유형에 대해 동일한 메소드의 여러 구현을 제공하는 행위입니다. 에서 OOP , 일반적으로 알려진 방법 오버로딩 . 예를 들면 :

public String format(int a) {
    return String.format("%2d", a);
}

public String format(Date a) {
    return new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").format(a);
}

format메소드 모두 단일 인터페이스를 공유 하지만 서로 다른 유형의 엔티티에서 작동 합니다 .

파라 메트릭 다형성

파라 메트릭 다형성 은 클래스 (또는 메서드) 자체가 클래스 (또는 메서드)의 매개 변수 인 유형에서 작동하도록 만드는 행위입니다. 종종 제네릭 이라고합니다 .

예를 들어 Java 는 인스턴스화 시간에 List[T]매개 변수 T를 예상하며이 매개 변수는 결과 객체의 유형을 정의합니다.

순수 주의자들을 위해 내가 원시 유형 을 의도적으로 무시하고 있다는 점에 유의하십시오 .

List[String]List[Date]공유 단일 인터페이스 에,하지만 작업을 (하고있는) 다른 유형 .

하위 유형 다형성

하위 유형 다형성 은 아마도 처음에 귀하의 질문에서 의미 한 바일 것입니다. 동일한 유형의 여러 구현에 단일 인터페이스를 제공하는 행위입니다.

관례적인 예를 사용하려면 : Animal모든 구현이 준수해야하는 계약을 제공합니다. Dog이며 선언 Animal하는 모든 작업을 지원 Animal합니다. Liskov 대체 원칙 에 따르면 Dog의 인스턴스 Animal가 예상 되는 인스턴스 를 사용할 수 있습니다 (반대는 아님).

경우 CatDog모두 서브 클래스는 Animal, 그 후에는 공유 단일 인터페이스를 하지만, 사실에 서로 다른 유형 .

여기서는 약간의 접선에 대해 설명하겠습니다.하지만 하위 유형 다형성은 재정의 를 허용하는 유일한 것입니다 . 부모 클래스에 의해 정의 된 메서드의 동작을 재정의하는 행위입니다. 이것은 종종 우리가 전에 보았 듯이 다형성의 한 유형이며 실제로 서브 클래 싱이 필요하지 않은 오버로딩 과 혼동됩니다 (실제로 클래스가 필요하지도 않습니다).


그렇다면 인터페이스 기반 다형성은 어떻습니까?
siamak

@siamak은 부모 유형이 완전히 추상적 인 특정 종류의 하위 유형 다형성이 아닙니까? 아니면 다른 의미입니까?
니콜라스 Rinaudo

인터페이스의 의도는 다음과 같이 객체 지향 언어에 존재하는 참조 유형으로서의 인터페이스입니다. 인터페이스 I1 {void M ();} 하위 유형 또는 상속 기반 다형성과 인터페이스 기반 다형성 사이에는 많은 차이가 있다고 생각합니다. . 유형 간의 상속 기반 다형성에는 "Is-a"관계가 있지만 Interface-baced 다형성에는 그런 것이 없기 때문입니다. 사실 다른 구현과 같은 동작이 다양한 다른 유형 (클래스) 사이에 공유 할 수
siamak

나는 혼란 스럽습니다. 대문자에 대한 다소 탄도적인 접근을 제외하고는 인터페이스 기반 다형성이라고 부르는 것에 대한 설명이 하위 유형 다형성에 대한 설명과 정확히 일치하는 것 같습니다. 차이가 있다고 확신하지만 실제로는 명확하지 않습니다.
니콜라스 Rinaudo

보시다시피 자동차와 새, 사람 사이에는 관계가 없지만 그들 자신의 방식으로 움직일 수 있습니다. Abstract 클래스와 Interface 사이에는 엄청난 차이가 있으며 인터페이스를 사용하는 것은 subtyping과 동일하지 않으므로 상속 다형성과 인터페이스 기반 다형성은 동일하지 않으며 동일하지 않습니다. // 하드, 의견 코딩 세그먼트 //
siamak

6

여기에 최고의 정의가 제공되는 것 같으므로 다른 관찰자들을 위해 2 센트 를 추가하겠습니다 . 더 많은 도움이되기를 바랍니다.

다형성에는 두 가지 종류가 있습니다.

1. Compile-time (static) polymorphism or (ad hoc) polymorphism.

이것은 단순히 메서드 오버로딩과 연산자 오버로딩입니다.

2.  Run time or (dynamic) polymorphism.

첫 번째 용어 는 Java 및 C ++ 용어에서 상속되었습니다.

그러나 .NET 용어에서 두 번째 것 ( 런타임 다형성을 의미 함) 만이 실제로 다형성으로 간주되며 단순히 다형성 이라고 합니다.

그리고 내가 아는 한 ( 런타임 ) 다형성 을 구현하는 세 가지 방법이 있습니다 .

 1. Parametric polymorphism or simply the use of generics (templates in C++).

 2. Inheritance-based polymorphism or subtyping.

 3. Interface-based polymorphism.

인터페이스 기반 다형성의 간단한 예 :

interface Imobile
{
    void Move();
}

class Person :Imobile
{
    public void Move() { Console.WriteLine("I am a person and am moving in my way."); }
}

class Bird :Imobile
{
    public void Move() { Console.WriteLine("I am a bird and am moving in my way."); }
}

class Car :Imobile
{
    public void Move() { Console.WriteLine("I am a car and am moving in my way."); }
}


class Program
{

    static void Main(string[] args)
    {
        // Preparing a list of objects
        List<Imobile> mobileList = new List<Imobile>();

        mobileList.Add(new Person());
        mobileList.Add(new Bird());
        mobileList.Add(new Car());

        foreach (Imobile mobile in mobileList)
        {
            mobile.Move();
        }

        // Keep the console open
        Console.WriteLine("Press any key to exit the program:");
        Console.ReadKey();
    }
}

산출:

 I am a person and am moving in my way.
 I am a bird and am moving in my way.
 I am a car and am moving in my way.
 Press any key to exit the program:

나는 여전히 당신이 만드는 차이를 보지 못합니다. Person, Bird 및 Car는 모두 Imobile의 하위 유형입니다. Person은 Imobile, Bird는 Imobile, Car는 Imobile입니다. Imobile 유형의 변수가 필요한 경우 Person, Bird 또는 Car 인스턴스를 사용할 수 있으며 모두 check를 입력합니다. 이것이 바로 아형 다형성이 의미하는 바입니다.
Nicolas

Bird와 Person, Car는 Imobile의 하위 유형이 아니며 해당 인터페이스의 구현 자이며 자체 방식으로 인터페이스를 "실현"합니다. "하위 유형"이라는 용어는 실제 유형과 상속 된 실제 하위 유형간에 널리 사용됩니다. 그리고이 상황에서 그들 사이에는 "Is-a"관계가 있습니다. 예를 들어 개는 포유류의 아형입니다.
siamak 2014 년

컴파일러 관점에서 인터페이스에 대한 참조를 만들고 참조를 사용하는 것은 사실이며 올바른 것입니다. / BUT / IT는 상속 관계에서 하위 유형을 지정하는 것과 동일한 개념이 아닙니다. 인터페이스의 구현자를 하위 유형으로 부르는 것이 너무 어색하고 사실이 아니라고 생각합니다.
siamak

상속 기반 다형성의 예는이 답변을 설명하는 데 적합합니다.
Marcelo Mason

5

다형성은 여러 다른 기본 엔티티 (일반적으로 데이터이지만 항상 nit)가 모두 런타임에 동일하게 보이고 작동 할 수 있도록하는 공통 인터페이스를 공유하는 소프트웨어 코딩 추상화입니다. 우리는 이것을 개발 기술로 사용하여 절대적으로 최소한의 구현으로 유사하지만 동일하지 않은 광범위한 인스턴스에 대해 일관된 동작을 적용하여 버그 및 불일치에 대한 기대치를 줄입니다.

폴.


5

다형성 == 여러 클래스 + 동일한 메서드 시그니처 + 클래스 별 동작.




2

다형성은 객체가 동일한 호출에 대해 다르게 나타나고 행동하는 능력입니다. 예 : 각 동물이 다르게 나타나고 소리가납니다 (당신이 그것을 치면 :))


2

다형성은 객체를 상위 유형의 인스턴스로 처리 할 수 ​​있도록하는 프로그래밍 언어의 기능입니다.


Downvoter-이유를 설명해 주시겠습니까?
TarkaDaal

1

다른 유형에 대한 일련의 유사한 작업에 단일 이름을 부여합니다. 잘 수행되면 비유가 분명합니다. 예를 들어 숫자를 산술적으로 "추가"하고 연결 (길이를 합산)하여 문자열을 "추가"합니다.


1

이것이 제가 항상 지켜온 정의입니다.

두 객체가 동일한 의미를 가진 동일한 메시지에 응답하는 경우 두 객체는 ​​둘 사이에서 다형성 (특정 프로토콜과 관련하여)됩니다.

다형성은 메시지에 관한 것이며 동일한 의미론으로 동일한 메시지 세트에 응답 할 수 있다는 것입니다.

두 개체가 비어 있으면 응답 할 수 있습니까? 그러나 메시지의 의미는 다릅니다. 그렇다면 그들은 다형성이 아닙니다.


1

하위 수준의 다형성은 인터페이스 인스턴스에서 인터페이스 구현자가 정의한 메서드를 호출하는 기능입니다.


1

다형성은 객체가 많은 유형 ( '모양')을 가질 수 있도록하고 다른 유형을 알거나 신경 쓰지 않고 수행해야하는 작업에 따라 해당 유형으로 취급 할 수 있도록하는 프로그래밍 기능입니다.


1

다형성은 고급 알고리즘 코드가 여러 유형의 데이터에서 변경되지 않고 작동 할 수 있도록하는 언어 기능입니다. 그리고 다른 문장은, 그것이 무엇이든간에 ... ;-P.

(C ++에서 지원하는 유형은 내 대답 : C ++의 다형성에 나열되고 대조됩니다. )


0

다형성 개념은 최근 현상이되었습니다. 여기에 실제 드리프트가 있습니다. 런타임은 수퍼 클래스의 참조에 의해 호출되어야하는 하위 메소드를 정의합니다. 자, 실제로는 무엇을 의미합니까? 실제로는 아무것도 의미하지 않습니다. 다형성없이 간단하게 코딩 할 수 있습니다. 왜? 다형성을 얻지 못했다면 모든 하위 클래스 함수 정의를 외워야했기 때문입니다. 다형성은 실제로 우리를 이로부터 구합니다.

다음과 같이 목록을 정의 할 수 있습니다.

List list = new List();

그러나을 확인하면 다음 IList과 같은 인터페이스의 이점을 얻을 수 있습니다.

IList list = new List();

IList참조를 자유롭게 사용하십시오 . IList다른 클래스에서도 구현 되었다고 가정하면 알 수없는 클래스의 메서드를 다시 사용할 수 있습니다.IList 해당 클래스 이름을 기억하지 않고 참조를 . 놀랍지 않습니까?

이제 더 가치있는 정보가 나옵니다.
Java는 기본적으로 다형성이지만 .NET과 C ++는 그렇지 않습니다. MS에서는 기본 함수 virtual(및 .NET override키워드) 를 선언해야합니다 .

또한 다형성에는 두 가지 필수 규칙이 있습니다. 하나는 상속 (인터페이스 impl. 또는 클래스 확장을 통해)이고 다른 하나는 재정의입니다. 재정의하지 않으면 다형성이 존재하지 않습니다. 메서드 오버로딩 (항상 단일 클래스에 있음)은 "최소한"다형성의 유형이기도합니다.


1
그것은 2 개 이상의 문장입니다.
Dangerous

0

주어진 메서드 시그니처에 대해 계층 적으로 관련된 다른 클래스에 대해 다른 메서드 구현이 실행됩니다.


0

다형성은 특정 구현이 필요하지 않고 공통 인터페이스에서 사용 가능한 메서드 만 사용하여 공통 인터페이스를 구현하거나 공통 기본 클래스를 확장하는 여러 클래스를 공통 방식으로 사용하는 기능입니다.

즉, Java에서 ArrayList와 LinkedList는 모두 List를 구현하므로 변수를 List로 선언하면 변수가 ArrayList 또는 LinkedList로 인스턴스화되었는지 여부에 관계없이 항상 List에서 허용되는 작업을 수행 할 수 있습니다.


0

동일한 유형의 엔티티 (즉, 동일한 인터페이스를 구현하거나 동일한 클래스에서 파생 됨)는 다른 방식으로 (동일한 메서드 이름에서) 작동합니다.


0

다른 클래스 (확장 또는 구현을 사용하여 일종의 상속 관계를 갖는)에서 동일한 서명의 메서드를 구현하는 것은 메서드 재정의이자 다형성이라고 생각합니다. 이러한 방식으로 동일한 메서드 서명의 여러 형태를 달성하기 때문입니다.


-2

때때로 객체가 동적으로 호출되는 것 같습니다. 개체가 고전적인 모양의 폴리에서 삼각형, 정사각형 등인지 확실하지 않습니다. 예.

따라서 이러한 모든 것을 남기려면 파생 클래스의 함수를 호출하고 동적 클래스 중 하나가 호출 될 것이라고 가정합니다.

정사각형, 삼각형 또는 직사각형인지 상관하지 않습니다. 당신은 그 지역에 관심이 있습니다. 따라서 getArea 메서드는 전달 된 동적 개체에 따라 호출됩니다.


-2

다형성은 다양한 데이터 유형의 입력 데이터를 받아들이도록 자동으로 조정되는 함수의 기능입니다. 두 개의 더블 '1.1'과 '2.2'를 'Add'하고 '3.3'또는 'Add'두 문자열 "Stack"과 "Overflow"를 얻고 "StackOverflow"를 얻을 수 있습니다.


왜 누군가 이것을 표시 했습니까? 이것은 National Instrument의 다형성에 관한 웹 페이지의 '문자 적 대답'입니다 !!!
J-Dizzle

-3

다형성은 다른 객체가 동일한 방법에 다른 방식으로 반응하는 것입니다. 예를 들어, 사람이 길을 걷는 동안 자동차가 길을 이동합니다. 그것들은 같은 도로에 다른 방식으로 반응하는 두 물체입니다.


실제로 다형성은 서로 다른 클래스의 인스턴스를 공통 유형으로보고 있으며 서로 다른 클래스가 이러한 메소드를 구현하는 방법과 관계없이이 공통 유형에 선언 된 메소드를 사용할 수있었습니다.
GaRRaPeTa
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.