因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();
}
}
}