java protected

包结构
world 代表any class

stackoverflow

同包可以随便用

package xyy.test.protected_test.pkg1;

/**
 * Created by xyy on 17-1-22.
 */
public class Cookie {
    protected void say(){
        System.out.println("hello");
    }
}
package xyy.test.protected_test.pkg1;

/**
 * Created by xyy on 17-1-22.
 */
public class CookieTest {

    public static void main(String[] args) {
        // 同包可以。
        new Cookie().say();
    }
}

不同包

“在Object类中,clone方法被声明为protected,因此无法直接调用anObject.clone()。子类只能直接调用受保护的clone方法克隆它自己。为此,必须重新定义clone方法,并将它声明为public,这样才能让所有的方法克隆对象”

需要实现Cloneable接口才能clone

package xyy.test.protected_test.pkg2;

import xyy.test.protected_test.pkg1.Cookie;

/**
 * Created by xyy on 17-1-22.
 */
/**
 * 需要支持Cloneable接口才能clone
 */
public class TestCookie extends Cookie implements Cloneable {

    private String name;

    public TestCookie(String name) {
        this.name = name;
    }

    public void test() {
        say();
    }

    @Override
    public Object clone() throws CloneNotSupportedException {
        return super.clone();
    }

    public static void main(String[] args) throws CloneNotSupportedException {

        // -----------比较以下两种---------------

        // new Cookie().say();// error  不同包只能通过继承得到,直接调用是不可见的。

        new TestCookie("test0").say();// 子类不同包,是通过继承得到的,可以

        // -----------比较以下两种---------------
        TestCookie test1 = new TestCookie("test1");
        test1.test();
        TestCookie test2 = (TestCookie) test1.clone();
        test2.test();

        // 验证两个对象是不同引用
        System.out.println(test1 == test2);
    }
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 对象的创建与销毁 Item 1: 使用static工厂方法,而不是构造函数创建对象:仅仅是创建对象的方法,并非Fa...
    孙小磊阅读 6,233评论 0 3
  • 6 接口与内部类 后面将介绍Java的几种常用的高级技术,掌握以完善自己的Java工具箱。 首先,接口(inter...
    我快要上天啦阅读 3,251评论 0 1
  • 第一章:Java程序设计概述 Java和C++最大的不同在于Java采用的指针模型可以消除重写内存和损坏数据的可能...
    loneyzhou阅读 5,040评论 1 7
  • 《Effective Java》笔记(上) 对象的创建与销毁 Item 1: 使用static工厂方法,而不是构造...
    OCNYang阅读 7,475评论 2 17
  • Object类是Java中其他所有类的祖先,没有Object类Java面向对象无从谈起。作为其他所有类的基类,Ob...
    时待吾阅读 3,365评论 0 1