zoukankan      html  css  js  c++  java
  • [置顶] 顿悟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();
    		}
    	}
    }
    






  • 相关阅读:
    asp.net 发送邮件
    效控制C#中label输出文字的长度,自动换行
    无法连接到WMI 提供程序 请注意,你只能使用SQL Server 配置管理器来管理SQL Server 2005服务器。找不到指定的模块。[0x8007007e]
    查询区分大小写
    ASP.NET母版页引用外部css和js文件的写法
    VS2008 Debugging Breakpoint 补丁
    firefox下获得焦点
    IE打开出现windows找不到文件'(null)'解决方法Vinzipblog文之巴博客
    邪恶的web上下键焦点移动
    jQuery对下拉框Select操作总结
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3281198.html
Copyright © 2011-2022 走看看