2012-04-16 4 views
13

파라 메트릭 다형성은 다양한 데이터 (유형)에 대해 균일 한 동작을 허용하는 기술입니다. 내 지식이 맞습니까?Java에서 파라 메트릭 다형성이란 무엇입니까 (예)?

이 예제는 매개 변수 다형성입니까? Animal.talk은 특정 동물 유형 (고양이 또는 개)에도 불구하고 통화가 가능하기 때문에 믿습니다.

public interface Animal 
{ 
    public String talk(); 
} 

public class Cat implements Animal 
{ 
    public String talk() 
    { 
    return "Cat says Meow!"; 
    } 
} 

public class Dog implements Animal 
{ 
    public String talk() 
    { 
    return "Dog says Woof! Woof!"; 
    } 
} 

import java.util.*; 

public class PolymorphismExample 
{ 
    public static void main(String[] args) 
    { 
    Collection<Animal> animals = new ArrayList<Animal>(); 
    animals.add(new Cat()); 
    animals.add(new Dog()); 
    for (Animal a : animals) 
    { 
     System.out.println(a.talk()); 
    } 
    } 
} 

감사합니다.

편집 : 내 예제가 매개 변수 다형성을 구체적으로 나타내지 않는 경우 하나를 제공 하시겠습니까? 고맙습니다.

+0

올바른 것으로 보입니다. 기본적으로 Cat과 Dog는 동물 유형에 따라 실제 유형을 고려하지 않고 취급합니다. – dvallejo

+2

하스켈러 (Haskeller)로서, 저는 파라 메트릭 다형성 (parametric polymorphism)을 부르지 않을 것입니다. 매개 변수형 다형 함수는 모든 _parameter_ 유형 'T'에 대해 동일하게 작동하는'LinkedList reverse (LinkedList )'와 같을 것입니다. 파라 메트릭 다형 함수는 인터페이스 메소드를 호출 할 수 없습니다. –

답변

18

"매개 변수형 다형성"은 Java의 "Generics"에 대한 또 다른 용어입니다. 아이디어는 간단합니다. 유형이 특정 클래스에서 사용될 것이라고 명시되어 있습니다. 이에 대한 명확한 예는 java.util 패키지의 모든 컬렉션에 있습니다.

Java에서 제네릭의 모든 뉘앙스를 배우려면 Angelika Langer의 FAQ을 강력히 권장하며 모든 사양을 탐색합니다.

Collection<Animal> animals = new ArrayList<Animal>(); 

모음은 동물 개체를 유지하기 위해 지정됩니다 : 당신의 코드에서

,이 라인을 사용하여 제네릭의 예입니다.

3

정확하게. 파라 메트릭 다형성은 일반적으로 generics/templates를 참조합니다. 위키

: 파라 다형 함수 또는 데이터 유형을 사용

은 동일하게 그 종류에 의존하지 않고, 일반적으로 그렇게 값을 처리 할 수있는 기록 될 수있다.

+2

이 페이지는 http://en.wikipedia.org/wiki/Polymorphism_(computer_science)에서 하위 유형 다형성으로 예제를 표시하는 이유는 무엇입니까? 하위 유형 다형성과 매개 변수 다형성의 차이점은 무엇입니까? –

+0

@DannyRancher 두 번째 생각에서, 당신이 한 것은 하위 유형 다형성 (상속을 기반으로하는 다형성)과 더 비슷합니다. 파라 메트릭 다형성은 제네릭을 사용하여 클래스 나 함수를 작성할 때 일반 매개 변수 (예 : LinkedList )로 수신 할 수있는 두 개 이상의 클래스에서 작동 할 때 사용됩니다. –

+0

@DannyRancher 차이점을 명확히하기 위해 제 대답에 몇 가지 세부 사항을 추가했습니다. – trutheality

6

위키 백과 : 프로그래밍 언어와 유형 이론에서

은, 파라 메트릭 다형성은 여전히 ​​전체 정적 유형 안전을 유지하면서, 언어 표현력 만들 수있는 방법입니다. 파라 메트릭 다형성을 사용하면 함수 또는 데이터 유형을 유형에 의존하지 않고 값을 동일하게 처리 할 수 ​​있도록 총칭 할 수 있습니다. 이러한 함수 및 데이터 유형을 각각 제네릭 함수 및 제네릭 데이터 유형이라고하며 제네릭 프로그래밍의 기초를 형성합니다.

그래서 훌륭한 예제는 표준 Java 라이브러리 모음입니다.

public static <T extends Comparable<? super T>> void sort(List<T> list) 

그것은 T 실제로 어떤 유형에 대한 걱정없이, 다른 T 년대에 필적 유형 T의 객체의 목록을 가지고 목록을 정렬 할 수 있습니다 : 예를 들어

, Collections.sort는 다음과 같이 선언 .

는 아형 다형성 다르다 : 아형 다형성 sortList가 어떤 종류 취할 수 있다는 점을들 수있다 - ArrayList하는 LinkedList

관련 문제