Swa*_*rma 10 java inheritance static-methods
为什么以下代码打印"Main"?
public class Main
{
public static void method()
{
System.out.println("Main");
}
public static void main(String[] args)
{
Main m = new SubMain();
m.method();
}
}
class SubMain extends Main
{
public static void method()
{
System.out.println("SubMain");
}
}
Run Code Online (Sandbox Code Playgroud)
在运行时,m指向一个实例Submain,因此它应该在概念上打印"SubMain".
por*_*ges 18
静态方法在变量的编译时类型上解析.m是类型Main,所以Main调用方法.
如果将其更改为SubMain m ...,则将SubMain调用on方法.
Ale*_*exR 15
这是因为静态方法不是多态的.此外,静态方法不应该由对象调用,而是使用类,即Main.method()或SubMain.method().当你调用m.method()java实际调用Main.method()因为m是Main类型.
如果你想享受多态,不要使用静态方法.