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