java cloneable原理_[置顶] 顿悟JAVA,自己实现Object的Clone的约束关系(上)

因protected 的理解,顿悟一些JAVA的原理,模拟了Object类的子类为什么在调用clone方法前实现Cloneable接口。

这里不解释 ,上代码先。

运行效果

2ef4a43f2c0731bda1d389ec9cbc2a71.png

文件结构

4d1a9907ae45afb66d0bf749b13821a5.png

调用类

package com.tarena.android.javabasic.useInterface;

public class UseInterface {

public static void main(String[] args) {

SubclassFatherHaveAinterfaceTestA a =

new SubclassFatherHaveAinterfaceTestA();

SubclassFatherHaveAinterfaceTestB b =

new SubclassFatherHaveAinterfaceTestB();

try{

a.LikeClone();

b.LikeClone();

}catch(Exception e){

System.out.println(e.getMessage());

}

}

}

接口

package com.tarena.android.javabasic.useInterface;

public interface LikeCloneable {

//啥也没有 和 Cloneable一样的

}

基类

package com.tarena.android.javabasic.useInterface;

public class myclassUseFace {

//模仿Object 类来实现自己的clone规则,子类必须实现某个接口,这里是LikeCloneable

protected void LikeClone() throws CloneNotSupportedException {

if(this instanceof LikeCloneable)

{

System.out.println("必须实现LikeCloneable接口才能调用我,这个对象显然是实现了这个接口才看到我");

}

else

{

CloneNotSupportedException e = new CloneNotSupportedException("没有实现接口的惩罚");

throw e;

}

}

}

子类1

package com.tarena.android.javabasic.useInterface;

public class SubclassFatherHaveAinterfaceTestA extends myclassUseFace implements LikeCloneable {

public void LikeClone(){

try {

super.LikeClone();

} catch (CloneNotSupportedException e) {

System.out.println(this.getClass().getName()+

"如果本对象的类内有实现LikeCloneable接口,那么这一句话就会出现");

}

}

}

子类2

package com.tarena.android.javabasic.useInterface;

public class SubclassFatherHaveAinterfaceTestB extends myclassUseFace {

public void LikeClone(){

try {

super.LikeClone();

} catch (CloneNotSupportedException e) {

System.out.println(this.getClass().getName()+

"如果本对象的类内有实现LikeCloneable接口,那么这一句话就会出现");

e.printStackTrace();

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值