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

2022-09-02 23:52:08

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

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

问候。

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


答案 1

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

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

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

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

集合指定用于保存作为动物的任何对象。


答案 2

维基百科:

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

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

例如,声明为:Collections.sort

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

它可以采用与其他对象相当类型的对象列表并对列表进行排序,而不必担心实际是什么类型。TTT

它与亚型多态性不同:亚型多态性可以通过可以采取任何种类的事实来说明 - a,a等。sortListArrayListLinkedList


推荐