17

パラメトリックポリモーフィズムは、さまざまなデータ(タイプ)に対して均一なアクションを可能にする手法であると理解しています。私の知識は正しいですか?

この例はパラメトリック ポリモーフィズムですか? 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());
    }
  }
}

よろしく。

編集: 私の例が特にパラメトリック ポリモーフィズムを示していない場合は、提供していただけますか? ありがとうございました。

4

3 に答える 3

25

「パラメトリック ポリモーフィズム」は、Java の「ジェネリック」の別の用語です。アイデアは単純です。特定のクラスで使用されるを指定します。これの明確な例は、java.utilパッケージのすべてのコレクションに存在します。

Java のジェネリックのすべてのニュアンスを学習するには、Angelika Langer のFAQを強くお勧めします。仕様の隅々まで調べています。

あなたのコードでは、この行はジェネリックを使用する例です:

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

コレクションは、動物である任意のオブジェクトを保持するように指定されています。

于 2012-04-16T18:24:44.983 に答える
9

ウィキペディア:

プログラミング言語と型理論では、パラメトリックポリモーフィズムは、完全な静的型安全性を維持しながら、言語をより表現力豊かにする方法です。パラメトリックポリモーフィズムを使用すると、関数またはデータ型を一般的に記述できるため、型に依存せずに値を同じように処理できます。このような関数とデータ型は、それぞれジェネリック関数とジェネリックデータ型と呼ばれ、ジェネリックプログラミングの基礎を形成します。

したがって、優れた例は、標準のJavaライブラリコレクションです。

たとえば、Collections.sortは次のように宣言されます。

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

T他のオブジェクトに匹敵するタイプのオブジェクトのリストを取得し、実際Tのタイプを気にせずにリストをソートできます。T

これは、サブタイプのポリモーフィズムとは異なります。サブタイプのポリモーフィズムは、a、aなどのsort任意の種類をとることができるという事実によって例示されます。ListArrayListLinkedList

于 2012-04-16T18:25:41.937 に答える
5

正確に。パラメトリック ポリモーフィズムは一般に、ジェネリック/テンプレートを指します。

ウィキペディアから:

パラメトリック ポリモーフィズムを使用すると、関数またはデータ型を汎用的に記述できるため、型に依存せずに同じように値を処理できます。

于 2012-04-16T18:22:42.777 に答える