Is Java prevent overriding static methods?
我不明白为什么当我尝试编译此代码时编译器显示错误:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
A类和B类中两个方法之间的差异是返回类型,我读到Java防止重写静态方法。所以我期望编译器不会显示任何错误,因为最初没有任何重写!!
Java语言规范具有以下规则:
8.4.8.3. Requirements in Overriding and Hiding
If a method declaration d1 with return type R1 overrides or hides the declaration of another method d2 with return type R2, then d1 must be return-type-substitutable (§8.4.5) for d2, or a compile-time error occurs.
This rule allows for covariant return types - refining the return type of a method when overriding it.
因此,即使方法隐藏了超类中的一个,并且不重写它,返回类型也必须是兼容的。
类
来自JLS§;8.4.2-方法签名:
Two methods have the same signature if they have the same name and argument types.
因此,类
另外,它不是有效的方法隐藏,因为这要求隐藏方法的返回类型与父类方法的返回类型相同或子类型相同。这里也没有发生这种情况。
因此,要么将类