Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的参数多态性是什么(附示例)?_Java_Polymorphism - Fatal编程技术网

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

Java中的参数多态性是什么(附示例)?,java,polymorphism,Java,Polymorphism,据我所知,参数多态性是一种允许对各种数据(类型)执行统一操作的技术。我的知识正确吗 这个例子是参数多态性吗? 我相信这是因为Animal.talk允许调用talk,而不管具体的动物类型(猫或狗) 公共界面动物 { 公共字符串对话(); } 公营猫科动物 { 公共字符串对话() { return“猫叫!”; } } 公营狗具动物 { 公共字符串对话() { return“狗说汪!汪!”; } } 导入java.util.*; 公共类多态性示例 { 公共静态void main(字符串[]args)

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

这个例子是参数多态性吗? 我相信这是因为Animal.talk允许调用talk,而不管具体的动物类型(猫或狗)

公共界面动物
{
公共字符串对话();
}
公营猫科动物
{
公共字符串对话()
{
return“猫叫!”;
}
}
公营狗具动物
{
公共字符串对话()
{
return“狗说汪!汪!”;
}
}
导入java.util.*;
公共类多态性示例
{
公共静态void main(字符串[]args)
{
收集动物=新建ArrayList();
添加(新的Cat());
添加(新狗());
(动物a:动物)
{
System.out.println(a.talk());
}
}
}
问候


编辑:如果我的示例没有特别显示参数多态性,请您提供一个?谢谢。

没错。参数多态性通常指泛型/模板

来自维基百科:

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

“参数多态性”只是Java中“泛型”的另一个术语。想法很简单:您可以声明特定类将使用什么类型,这方面的一个明确示例出现在
java.util
包的所有集合中

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

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

Collection<Animal> animals = new ArrayList<Animal>();
Collection animals=new ArrayList();
指定集合来保存任何动物对象。

维基百科:

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

因此,标准Java库集合就是一个很好的例子

例如,
Collections.sort
声明为:

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

public static看起来是正确的。基本上,你对待猫和狗时,不考虑它们基于动物类型的实际类型。作为Haskeller,我不会称之为参数多态性。参数多态函数类似于
LinkedList reverse(LinkedList)
,它对所有参数类型
T
的作用相同。参数多态函数无法调用接口方法。为什么此页面:将示例显示为子类型多态?子类型多态性和参数多态性之间有什么区别?@Dannylancher你所做的,经过再三考虑,确实更像是子类型多态性(基于遗传的多态性)。参数多态性是指当您使用泛型编写任何类或函数时,它可以用于多个类,而这些类可以作为泛型参数接收(例如LinkedList)。@DannyRancher我在回答中添加了一些细节以澄清差异。
public static <T extends Comparable<? super T>> void sort(List<T> list)