public class B {
static int i =1;
public static int multiply(int a,int b)
{
return i;
}
public int multiply1(int a,int b)
{
return i;
}
public static void main(String args[])
{
B b = new A();
System.out.println(b.multiply(5,2));
System.out.println(b.multiply1(5,2));
}
}
class A extends B
{
static int i =8;
public static int multiply(int a,int b)
{
return 5*i;
}
public int multiply1(int a,int b)
{
return 5*i;
}
}
输出:
1
40
为什么会这样?请解释。
最佳答案
您不能覆盖 static
方法 - 它们静态绑定(bind)到定义它们的类。因此,与实例方法不同,它们根本不是多态的。
事实上,b.multiply(5,2)
应该会导致编译器警告,说明 static
方法调用的范围应该是类而不是实例,因此正确的形式是 B.multiply(5,2)
(或 A.multiply(5,2)
)。这随后阐明了实际调用了哪个方法。
如果省略编译器警告,您很容易感到困惑:-)
关于java - Java 中的静态和覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3060443/