原型模式的实现以及遇到的问题

本文通过一个Java原型模式的例子,探讨了如何实现clone和equals方法,以及在实现过程中遇到的问题。在重写clone接口时,无需处理类型转换和异常,而equals方法的重写未被提示为继承自Object类。此外,还强调了当不重写equals时,默认使用对象的地址进行比较。同时,文章提到了构造方法重写的注意事项,即所有构造方法都需要相应重写。
摘要由CSDN通过智能技术生成

clone、equals实现的设计

看到原型模式,想验证一下相关接口
首先实现克隆模式
要覆写 clone和equals接口

clone的实现及测试

public class Prototype {
    String name;

    public Prototype() {

    }

    public Prototype(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Prototype clone() {
        return new Prototype(name);
    }

    public boolean equals(Prototype prototype) {
        return this.name.equals(prototype.getName());
    }

       public static void main(String[] args) {
        Prototype p1 = new Prototype();
        p1.setName("p1");
        Prototype p2 = null;

        p2 = p1.clone();

        System.out.println("验证equals和clone");
        p2.setName("p1");
        System.out.println(p1.getName());
        System.out.println(p2.getName());
        System.out.println(p1 == p2);
        System.out.println(p1.equals(p2));
        System.out.println("=========分割线=======");
        System.out.println("验证是不是同一个对象:");
        p2.setName("p2");
        System.out.println(p1.getName());
        System.out.println(p2.getName());
        System.out.println("=========分割线=======");
        System.out.println("验证equals和clone");
        System.out.println(p1.getName());
        System.out.println(p2.getName());
        System.out.println(p1 == p2);
        System.out.println(p1.equals(p2));

    }
}


结果:

验证equals和clone
p1
p1
false
true
=========分割线=======
验证是不是同一个对象:
p1
p2
=========分割线=======
验证equals和clone
p1
p2
false
false

Process finished with exit code 0

发现的问题

重写接口的时候返回值可以为原方法的子类,可以不声明抛异常

重写clone接口的时候

public Prototype clone() 继承自 protected native Object clone() throws CloneNotSupportedException;

转换类型和抛出异常不用处理,可以实现继承

不知道为何重写equals没有提示为重写方法(没有提示为继承父类object方法)

在重写一个类的构造方法的时候,要全部构造方法重写

举个例子:
默认无参构造,有参构造不能用,要手写有参构造
只重写有参构造,无参构造就不可用了,需要手动把无参构造空方法写上去

不重写equals的话,equals默认以地址判断,即==判断(这个太基础了,只是强调一下)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值