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



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

  1. [置顶] 分析Java死锁:分析jstack日志

    本文中我将展示一段垃圾代码,这段代码会产生死锁,这样围绕这段代码重点展示三种不同的方法来分析线程日志,从而得知什么地方有问题. 下面的讨论将用到两个类 Account 和 DeadlockDemo c ...

  2. [置顶] 自定义java Annotation快速入门与提高

    我们先来看看一个简单的注解类定义 import java.lang.annotation.Documented; import java.lang.annotation.Retention; impo ...

  3. [置顶] 遵循Java EE标准体系的开源GIS服务平台之二:平台部署

    传送门 ☞ 系统架构设计 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229 传送门 ☞ GoF23种设计模式 ☞ 转载请注明 ☞ http://blog.csd ...

  4. [置顶] 遵循Java EE标准体系的开源GIS服务平台架构

    传送门 ☞ 系统架构设计 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229 传送门 ☞ GoF23种设计模式 ☞ 转载请注明 ☞ http://blog.csd ...

  5. 方法object面试题分析:7JAVA中Object的clone方法详解-克隆-深克隆

    时间紧张,先记一笔,后续优化与完善.     每日一道理 翻开早已发黄的页张,试着寻找过去所留下的点点滴滴的足迹.多年前的好友似乎现在看来已变得陌生,匆忙之间,让这维持了多年的友谊变淡,找不出什么亲切 ...

  6. [置顶] Android开发笔记(成长轨迹)

    分类: 开发学习笔记2013-06-21 09:44 26043人阅读 评论(5) 收藏 Android开发笔记 1.控制台输出:called unimplemented OpenGL ES API ...

  7. 在UWP中页面滑动导航栏置顶

    最近在研究掌上英雄联盟,主要是用来给自己看新闻,顺便copy个界面改一下段位装装逼,可是在我copy的时候发现这个东西 当你滑动到一定距离的时候导航栏会置顶不动,这个特性在微博和淘宝都有,我看了@ms ...

  8. WinFrom窗体始终置顶

    调用WindowsAPI使窗体始终保持置顶效果,不被其他窗体遮盖: [DllImport("user32.dll", CharSet = CharSet.Auto)] privat ...

  9. Android自定义ScrollView实现一键置顶功能

    效果图如下: (ps:动态图有太大了,上传不了,就给大家口述一下要实现的功能吧) 要实现的功能:当ScrollView向上滑动超过一定距离后,就渐变的出现一个置顶的按钮,当滑动距离小于我们指定的距离时 ...

随机推荐

  1. FreeMarker---数据类型

    1.a.ftl 你好,${user},今天你的精神不错! ----------------------------- 测试if语句: <#if user=="老高"> ...

  2. C++编程规范之20:避免函数过长,避免嵌套过深

    摘要: 短胜于长,平胜于优,过长的函数和嵌套过深的代码块的出现,经常是因为没能赋予一个函数以一个紧凑的职责所致,这两种情况通常都能够通过更好的重构予以解决. 每个函数都应该顾其名而能知其义,易于理解的 ...

  3. Java 之 StringTokenizer

    class StringTokenizer Object to: break a string into tokens. Contructs StringTokenizer(String str)   ...

  4. linux-Python升级安装

    Wget https://www.python.org/ftp/python/3.5.0/Python-3.5.0.tgz tar zxvf Python-3.5.0.tar.gz && ...

  5. inode-软链接与硬链接

    一.inode是什么?理解inode,要从文件储存说起.文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector).每个扇区储存512字节(相当于0.5KB).操作系统读取硬 ...

  6. 小学生之KTV项目文档(bdqn)

    第一步:创建数据库连接方法和打开方法和关闭方法! 1 public class DBHelper 2 { 3 private string str = "server=.;database= ...

  7. MySql不支持主外键

    创建表不支持主外键,能够添加外键成功,但是无法外键约束.查资料发现MySql的默认ENGINE 为MyISAM  ,不支持外键,需要修改为 INNODB 修改前: Create Table CREAT ...

  8. SQL GROUP BY 语句

    合计函数 (比如 SUM) 常常需要添加 GROUP BY 语句. GROUP BY 语句 GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组. SQL GROUP BY 语法 ...

  9. ON UPDATE CURRENT_TIMESTAMP

    CREATE TABLE time1 (   id SMALLINT,   time1 TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TI ...

  10. SmartQQ二维码登陆接口分析

    SmartQQ是腾讯在Web上推出的一款单纯的聊天工具,pc端与移动端都可以访问,接下来具体的分析下登陆流程. 网站:http://w.qq.com/ 工具:这个随意能够看到http数据包就可以,浏览 ...