什么是Java中的参数多态(带示例)?

时间:2012-04-16 18:19:54

标签: java polymorphism

据我所知,参数多态是一种允许对各种数据(类型)进行统一操作的技术。我的知识是否正确?

这个示例是参数多态吗? 我相信是因为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());
    }
  }
}

问候。

编辑:如果我的例子没有具体展示参数多态性,请你提供一个?谢谢。

3 个答案:

答案 0 :(得分:21)

“参数多态”只是Java中“泛型”的另一个术语。这个想法很简单:你说明了特定类将使用的 types java.util包的所有集合中都有一个明显的例子。

为了学习Java中泛型的所有细微差别,我强烈推荐Angelika Langer的FAQ,它探讨了规范的每个角落。

在您的代码中,此行是使用泛型的示例:

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

指定一个集合来保存任何动物对象。

答案 1 :(得分:8)

百科:

  

在编程语言和类型理论中,参数多态是一种使语言更具表现力,同时仍保持完全静态类型安全性的方法。使用参数多态,可以一般性地编写函数或数据类型,以便它可以相同地处理值而不依赖于它们的类型。这些函数和数据类型分别称为泛型函数和通用数据类型,并构成泛型编程的基础。

标准的Java库集合就是一个很好的例子。

例如,Collections.sort声明为:

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

可以将T类型的对象列表与其他T进行比较并对列表进行排序,而不必担心T实际上是什么类型。

与子类型多态性不同:子类型多态性的例子是sort可以采用任何类型List - ArrayListLinkedList

答案 2 :(得分:4)

正。参数多态通常指泛型/模板。

来自维基百科:

  

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