我一直在阅读有关多态的内容,并想问一下,如果这是多态性的正确例子:
接口:
public interface Language {
public void talk();
}
继承它的两个不同的类:
public class Jimmy implements Language{
public void talk(){
System.out.println("Jimmy talks English");
}
}
public class David implements Language{
public void talk(){
System.out.println("David talks Spanish");
}
}
要运行的类:
public class RunProgram(){
public static void main(String [] args){
Jimmy j = new Jimmy();
David d = new David();
j.talk();
d.talk();
}
}
输出应为:
吉米说英语 大卫说西班牙语
这个想法是talk方法继承自接口,并且两个类(而不是对象)确定输出的确切含义,因此输出取决于您创建的对象并运行方法。对不起,如果我问一些可能很容易的事情,这个例子甚至可能不那么好,但我希望它可以说明我的想法。提前谢谢!
答案 0 :(得分:4)
Jimmy j = new Jimmy();
David d = new David();
j.talk();
d.talk();
不,上述代码中没有涉及多态性。删除界面Language
,代码甚至不会注意到。
在行动中演示多态的方法必须将接口作为变量的静态类型:
Language j = new Jimmy(), d = new David();
j.talk();
d.talk();
然而,当您涉及针对接口类型编写的方法时,会出现一个真正展示多态性作为有用语言特性的示例:
public void printTheTalk(String name, Language lang) {
System.out.println(name + " says " + lang.talk());
}
现在您可以看到该方法如何不知道对象的具体类型是否存在,但它可以与它们一起使用。
答案 1 :(得分:1)
这很接近。多态的要点是你可以引用一个接口或超类,它不关心对象的具体类(Jimmy
或David
)。
如果您要使用
Language j = new Jimmy();
Language d = new David();
然后这证明了多态性。变量j
和d
只关心它们是Language
,但talk()
的具体实现稍后会被调用。