我很困惑Java多态性是如何工作的。在下面的例子中,showText有三种多态性方法,这些方法分别命名为method-1、method-2和method-3。守则如下:
public class PolymorphismTest {
public static void main(String[] args) {
showText("def");
}
// method-1
private static void showText(Object abc) {
print("1.....");
showText(abc, "abc");
}
// method-2
private static void showText(Object abc, String item) {
// print(abc.getClass().getName());
print("2.....");
String text;
if (abc == null) {
text = null;
} else {
text = abc.toString();
}
showText(text, item);
}
// method-3
private static void showText(String abc, String item) {
print("3.....");
}
private static void print(String text) {
System.out.print(text);
}
}方法-1有一个参数,Object
Object,String
method-2值相同,而第一个参数类型是String。
main()使用String类型的参数调用method-1,在method-1的主体中它调用另一个方法,其中一个方法匹配,method-2或method-3。
我在java 8中测试它,输出是
1.....2.....3.....发布于 2021-11-23 10:43:18
重载是在编译时决定的,因此当第一个方法获得abc参数时,它会将其视为Object (而不是String),并调用具有适当签名的method-2。
您可能会感到困惑,因为这与适用于类实例(对象)方法的动态链接机制不同,并且基于调用所针对的实例的实际类(例如, in abc.toString())在运行时解析方法toString()。
https://stackoverflow.com/questions/70079236
复制相似问题