顿悟JAVA,自己实现Object的Clone的约束关系(上)

来源:互联网 发布:域名未授权解析 编辑:程序博客网 时间:2024/04/24 23:32

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

这里不解释 ,上代码先。


运行效果



文件结构


调用类

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规则,子类必须实现某个接口,这里是LikeCloneableprotected 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();}}}






原创粉丝点击