多态性 - 正确理解? (Java)
Polymorphism - correct understood? (JAVA)
我一直在阅读有关多态性的内容,想问一下,这是否是多态性的正确示例:
接口:
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 方法是从接口继承的,并且这两个类(而不是对象)确定输出的确切内容,因此输出取决于您创建和运行该方法的对象。对不起,如果我问的问题可能很简单,这个例子可能甚至不是那么好,但我希望它能说明我的想法。提前致谢!
这很接近。多态性的要点是你可以引用一个接口或 superclass,它并不关心对象真正是哪个具体 class(Jimmy
或 David
)是。
如果你要使用
Language j = new Jimmy();
Language d = new David();
那么这就证明了多态性。变量j
和d
只关心是Language
,talk()
的具体实现在后面调用
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());
}
现在您可以看到该方法如何甚至不知道对象的具体类型的存在,但它可以使用它们。
我一直在阅读有关多态性的内容,想问一下,这是否是多态性的正确示例:
接口:
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 方法是从接口继承的,并且这两个类(而不是对象)确定输出的确切内容,因此输出取决于您创建和运行该方法的对象。对不起,如果我问的问题可能很简单,这个例子可能甚至不是那么好,但我希望它能说明我的想法。提前致谢!
这很接近。多态性的要点是你可以引用一个接口或 superclass,它并不关心对象真正是哪个具体 class(Jimmy
或 David
)是。
如果你要使用
Language j = new Jimmy();
Language d = new David();
那么这就证明了多态性。变量j
和d
只关心是Language
,talk()
的具体实现在后面调用
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());
}
现在您可以看到该方法如何甚至不知道对象的具体类型的存在,但它可以使用它们。