因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. 使用带Arduino IDE & WIZ820io的ATmega1284P

    使用带Arduino IDE & WIZ820io的ATmega1284P 2013/07/04 | Filed under:   IO模块 and tagged with:   arduin ...

  2. Android软键盘强制弹出,隐藏输入法.

    本文实例讲述了Android实现弹出键盘代码,是一个非常实用的功能.代码非常简洁.分享给大家供大家参考. 具体功能代码如下: ? 1 2 3 4 5 6 7 8 Timer timer = new T ...

  3. Creating Apps With Material Design —— Defining Shadows and Clipping Views

    View转载请注明 http://blog.csdn.net/eclipsexys 翻译自Developer Android,时间仓促,有翻译问题请留言指出,谢谢 定义阴影和裁减 材料设计引入了深度的 ...

  4. 【ThinkingInC++】64、重载new和delete,来模仿内存的分配

    /** * 书本:[ThinkingInC++] * 功能:重载new和delete.来模仿内存的分配 * 时间:2014年10月5日14:30:11 * 作者:cutter_point */ #in ...

  5. c++11 : Variadic Macros(变长参宏)

    Variadic macros are function-like macros that contain a variable number of arguments. Remarks   To u ...

  6. Neral的前言

    大家好,我是Neral,我准备写一个js库. 在动笔之前,我一直都处在很忐忑的状态,因为我写代码讲究的是一种感觉,那是看到自己写的代码之后大脑中就出现之后的无数个编码分支的快感,但是,如果很长一段时间 ...

  7. Android -------- 序列化器生成xml文件

  8. 查看Linux相关信息

    1."uname -a ",可显示电脑以及操作系统的相关信息. 2."cat /proc/version",说明正在运行的内核版本. 3."cat / ...

  9. iOS_SN_CoreData数据迁移

    最开始使用CoreData的时候碰到一个问题,就是当增加一个字段的时候再次运行APP会发生崩溃,一开始不知道什么原因,只知道是里面的表结构发生改变,就重新删掉APP再次安装是可以运行的,这样调试完后觉 ...

  10. Swift中子类必须包含的构造器和析构器

    import Foundation /* Swift中子类必须包含的构造器 1.Swift允许在父类构造器前添加required关键字, 用于声明所有子类必须包含该required构造器 (如果没有声 ...