Abh*_*ain 3 java inheritance static overriding
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方法 - 它们静态地绑定到它们所定义的类.因此,与实例方法不同,它们根本不是多态的.
实际上,b.multiply(5,2)应该导致编译器警告,说static方法调用应该使用类而不是实例作为范围,因此正确的形式将是B.multiply(5,2)(或A.multiply(5,2)).然后,这澄清了实际调用的方法.
如果省略编译器警告,很容易混淆:-)