java 中的多态性方法如何匹配
how polymorphism method matches in java
我对 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);
}
}
- method-1 有一个
Object
类型的参数
- method-2有两个参数,参数类型分别为
Object
和String
- method-3有两个参数,与
method-2
相同的param count,而第一个参数类型是String
main()
调用 method-1
参数类型为 String
,在 method-1
的主体中它调用了另一个匹配的方法,method-2
或 method-3
?
我在java8测试,输出是
1.....2.....3.....
重载在 编译时 决定,因此当第一个方法获取 abc
参数时,它会将其视为 Object
(而不是 String
) 并调用具有适当签名的 method-2
。
您可能会感到困惑,因为这与动态链接机制不同,动态链接机制适用于 class 实例(对象)方法,并根据 在运行时 解析方法在进行调用的实例的实际 class 上(例如 abc.toString()
中的 toString()
)。
我对 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);
}
}
- method-1 有一个
Object
类型的参数
- method-2有两个参数,参数类型分别为
Object
和String
- method-3有两个参数,与
method-2
相同的param count,而第一个参数类型是String
main()
调用 method-1
参数类型为 String
,在 method-1
的主体中它调用了另一个匹配的方法,method-2
或 method-3
?
我在java8测试,输出是
1.....2.....3.....
重载在 编译时 决定,因此当第一个方法获取 abc
参数时,它会将其视为 Object
(而不是 String
) 并调用具有适当签名的 method-2
。
您可能会感到困惑,因为这与动态链接机制不同,动态链接机制适用于 class 实例(对象)方法,并根据 在运行时 解析方法在进行调用的实例的实际 class 上(例如 abc.toString()
中的 toString()
)。