同包可以隨便用
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痒谴,因此無法直接調(diào)用anObject.clone()魏蔗。子類只能直接調(diào)用受保護(hù)的clone方法克隆它自己舰绘。為此,必須重新定義clone方法筏餐,并將它聲明為public开泽,這樣才能讓所有的方法克隆對(duì)象”
需要實(shí)現(xiàn)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 不同包只能通過繼承得到,直接調(diào)用是不可見的魁瞪。
new TestCookie("test0").say();// 子類不同包穆律,是通過繼承得到的,可以
// -----------比較以下兩種---------------
TestCookie test1 = new TestCookie("test1");
test1.test();
TestCookie test2 = (TestCookie) test1.clone();
test2.test();
// 驗(yàn)證兩個(gè)對(duì)象是不同引用
System.out.println(test1 == test2);
}
}