Java是否可以防止重写静态方法?

青年

我不明白为什么在尝试编译此代码时编译器会显示错误:

class A
{
    public static void f()
    {
        System.out.println("A.f()");
    }
}

class B extends A
{
    public static int f()
    {
        System.out.println("B.f()");
        return 0;
    }
}

A和B类中两个方法之间的区别是返回类型,我读到Java可以防止覆盖静态方法。因此,我期望的是编译器不应显示任何错误,因为本来没有任何替代!

尼伯(JB Nizet)

Java语言规范有以下规则:

8.4.8.3。覆盖和隐藏要求

如果返回类型为R1的方法声明d1覆盖或隐藏了返回类型为R2的另一个方法d2的声明,则d1必须是d2的返回类型可替代的(第8.4.5节),否则会发生编译时错误。

此规则允许使用协变返回类型-在覆盖方法时优化方法的返回类型。

因此,即使该方法隐藏了父类之一并且没有覆盖它,返回类型也必须兼容。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Java / Hibernate Criteria Query API是否可以防止注入?

是否可以在派生类中重写静态方法?

是否可以防止ReplicaSet扩大/缩小?

是否可以防止Javascript中的popstate?

是否可以防止Trim()删除空格?

Doctrinepersist()是否可以防止SQL注入?

Git是否可以防止数据降级

Querydsl 是否可以防止 SQL 注入

是否有任何方法可以防止用户创建上帝模式文件夹

PetaPoco的Query(字符串查询,参数)方法是否可以防止SQL注入?

Javascript:是否有任何方法可以防止将对象重复放入数组?

在 Java 中使用 SealedObjects 是否可以防止序列化漏洞?

对象中正在运行的线程是否可以防止在Java中对其进行垃圾回收?

是否可以静态反映Java方法?

单个令牌是否可以防止RESTful API中的csrf?

Spring中的SimpleJdbcTemplate是否可以防止SQL注入?

是否可以防止用户在后台运行C ++程序?

是否可以防止Windows 10 uwp中的锁定屏幕?

是否可以防止从冻结的python数据类读取?

私人浏览是否可以防止套接字事件?

“ NOT NULL”是否可以防止rowid混叠?

是否可以“保护” IFS字符以防止字段分裂?

持有C ++参考是否可以防止变量被破坏?

Knex.js是否可以防止SQL注入?

规范的LINQ查询是否可以防止N + 1

是否可以防止从共享URL中剥离查询参数?

ACPI损坏的电池是否可以防止过度充电?

Spring Data JPA是否可以防止SQL注入

是否可以防止在每个HTTP请求中发送cookie?