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实际是什么类型。

It is different from subtype polymorphism: subtype polymorphism is exemplified by the fact that sort can take any sort of List -- an ArrayList, a LinkedList, etc.

于 2012-04-16T18:25:41.937 回答
5

恰恰。参数多态一般是指泛型/模板。

来自维基百科:

使用参数多态性,可以通用地编写函数或数据类型,以便它可以相同地处理值而不依赖于它们的类型。

于 2012-04-16T18:22:42.777 回答