什么是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 animals = new ArrayList(); animals.add(new Cat()); animals.add(new Dog()); for (Animal a : animals) { System.out.println(a.talk()); } } }
问候。
编辑:如果我的例子没有具体展示参数多态性,请你提供一个? 谢谢。
“参数多态”只是Java中“generics”的另一个术语。 这个想法很简单:你说明了特定类将使用哪些类型 , java.util
包的所有集合中都有一个明显的例子。
为了学习Java中generics的所有细微差别,我强烈推荐Angelika Langer的FAQ ,它探索了规范的每个角落。
在您的代码中,此行是使用generics的示例:
Collection animals = new ArrayList ();
指定一个集合来保存任何动物对象。
维基百科:
在编程语言和类型理论中,参数多态是一种使语言更具表现力,同时仍保持完全静态类型安全性的方法。 使用参数多态,可以一般性地编写函数或数据类型,以便它可以相同地处理值而不依赖于它们的类型。 这些函数和数据类型分别称为generics函数和通用数据类型,并构成generics编程的基础。
所以一个很好的例子是标准的Java库集合。
例如, Collections.sort
声明为:
public static > void sort(List list)
它可以采用T
类型的对象列表,与其他T
类似,并对列表进行排序,而不必担心T
实际上是什么类型。
它与子类型多态性不同:子类型多态性的例子是sort
可以采用任何类型的List
– 一个ArrayList
,一个LinkedList
等。
正是。 参数多态通常指generics/模板。
来自维基百科:
使用参数多态,可以一般性地编写函数或数据类型,以便它可以相同地处理值而不依赖于它们的类型。