Tus*_*kar 3 java polymorphism static-methods overriding
为什么Java不支持静态方法的动态多态?如果答案是"静态方法不应该在实例上调用,因此不需要在运行时解析方法调用",那么进一步的问题是"为什么Java允许我在实例上调用静态方法?".为什么不直接通过给出一些编译时错误来阻止用户直接调用实例上的方法.
反过来说,如果Java支持静态方法的Runtime Polymorphism会出什么问题?
为什么Java允许我在实例上调用静态方法?
你的假设是错误的.它从不调用类的实例.它总是叫上课.
尝试下面的示例代码,你永远不会得到 NullPointerException
class ABC {
public static void hello() {
System.out.println("Hello");
}
}
ABC abc = null;
abc.hello();
Run Code Online (Sandbox Code Playgroud)
如果Java支持静态方法的Runtime Polymorphism,会出现什么问题?
当你重写子类中的方法时,多态性就会出现.因为静态方法属于类,所以没有覆盖静态方法的意义.因此,多态性总是适用于仅属于类实例的方法.