java - Java中静态方法不支持动态多态的原因

标签 java polymorphism static-methods overriding

为什么Java不支持静态方法的动态多态? 如果答案是“不应在实例上调用静态方法,因此不需要在运行时解析方法调用”,那么进一步的问题是“为什么 Java 允许我在实例上调用静态方法?”。为什么它不通过给出一些编译时错误来简单地阻止用户直接调用实例上的方法。

换句话说,如果 Java 支持静态方法的运行时多态性,会出现什么问题?

最佳答案

Why does Java allow me to call static methods on instances?

你的假设是错误的。它从不调用类的实例。它总是呼吁上课。

试试下面的示例代码,你将永远不会得到 NullPointerException

class ABC {
    public static void hello() {
        System.out.println("Hello");
    }
}

ABC abc = null;
abc.hello(); 

What would have gone wrong if Java would have supported Runtime Polymorphism for static methods?

Polymorphism当你override子类中的方法。由于静态方法属于类,因此没有覆盖静态方法的意义。因此,多态性始终仅适用于属于类实例的实例方法。

关于java - Java中静态方法不支持动态多态的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24855056/

相关文章:

java - 我的 HashMap 仅放置空值

java - 在对象构造函数中使用随机数

java - Wicket 6 IColumn 名称如何可以是字符串以外的类型?

java - 创建一个没有按钮的选项 Pane

使用继承的c++语法

c++11 - 在非多态类型的情况下,dynamic_cast<void*> 是否保证工作(即等于 static_cast<void*>)?

c# - 覆盖等于和类型转换

java - 访问java类的方法的最佳方法是创建对象或使方法成为静态类型?

c++ - 访问非静态数据成员

c# - 当第一次访问静态类是基类上的静态方法时,为什么我的静态对象没有被实例化?