对于父类和子类中具有相同名称和不同参数的方法,我有以下3种情况。
案例1:
class Parent
{
public void hello(Object obj)
{
System.out.println("Parent");
}
}
class Child extends Parent
{
public void hello(String obj)
{
System.out.println("Child");
}
}
情况2:
class Parent
{
public void hello(String obj)
{
System.out.println("Parent");
}
}
class Child extends Parent
{
public void hello(Object obj)
{
System.out.println("Child");
}
}
情况3:
class Parent
{
public void hello(Object obj)
{
System.out.println("Parent");
}
public void hello(String obj)
{
System.out.println("String in Same Class");
}
}
class Child extends Parent
{
}
具有main()如下:
public static void main(String[] args) {
Child c = new Child();
c.hello(null);
}
案例1的输出:
Child
案例2的输出
Parent
情况3的输出
String in Same Class
我观察到,在所有三种情况下,每次都调用具有String参数的方法。不在“孩子”或“父母”中。我真的很困惑,因为'null'应该造成一些歧义,或者应该从child类中选择方法作为其Child对象。为什么会这样?
答案 0 :(得分:3)
根据Java语言规范§15.12.2.5选择最具体的方法
如果可以使用多个成员方法并且适用于 方法调用,有必要选择一种方法来提供 运行时方法分派的描述符。 Java编程 语言使用选择最具体方法的规则。
在您的情况下,有一种方法可以接受fillMatrix(double** matrix, int n)
,而另一种方法则可以接受Object
。由于String
是String
的子类,因此后者更为具体,因此将被选择。有关被认为更具体的内容的更多详细信息,请参见语言规范。