java - 不应重写方法的简单现实世界示例?

标签 java

我正在为关键字 final 准备一些练习。它用于定义不能在其子类中重写的方法。

但是我很难找到一些真正好的简单的现实世界示例,我想在这些示例中避免子类中的方法被重写。

有什么提示吗?

最佳答案

非抽象类的 equals() 方法的实现必须用 final 修饰符标记。这个陈述可以很容易地通过例子证明(来自标准库的真实代码):

public class Date {

     private transient long fastTime;

     ....

     public long getTime() {
         return getTimeImpl();
     }

     ....

     public boolean equals(Object obj) {
         return obj instanceof Date && getTime() == ((Date) obj).getTime();
     }
}

public class Timestamp extends java.util.Date {

    public boolean equals(java.lang.Object ts) {
        if (ts instanceof Timestamp) {
        return this.equals((Timestamp)ts);
        } else {
        return false;
        }
    }

    public boolean equals(Timestamp ts) {
        if (super.equals(ts)) {
            if  (nanos == ts.nanos) {
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }
}

这意味着违反了 equals() 契约:

date.equals(timestamp) == true

但是

timestamp.equals(date) == false

关于java - 不应重写方法的简单现实世界示例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7807525/

相关文章:

java - 如何在java中重新创建compareTo方法?

java - 如何确保 OpenJPA 中的非托管/托管对象身份?

java - 使用 Java 求解 CPLEX .mod

java - @OneToOne 单向级联没有通过sql查询删除

java - 验证每个 Rest API 请求的访问 token 的最佳方式

java - 服务器启动时Tomcat "no method found"错误

java - 在 Java 中实现 REST API 客户端和 JSON 解析器的最简单方法?

java - 用Java编写受密码保护的tar.gz文件

java - 缩小在 Java 中的方法调用中是如何工作的?

java - 在 Eclipse 中轻松浏览 Java 注释