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

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






原文地址:https://www.cnblogs.com/keanuyaoo/p/3281198.html