package packageA; public class ClassA { protected String s; }
如今有另一個包裏的類繼承java
package packageB; import packageA.ClassA; public class ClassB extends ClassA { public void run(){ System.out.println("run"); ClassA a=new ClassA(); System.out.println(a.s); } }
結果會發現a.s會出錯,緣由是無訪問權限IDE建議改成publiccode
但是ClassB明明訪問了ClassA啊(以前在ClassB中main方法訪問出問題還覺得是static方法不能訪問...)繼承
可當把ClassB移動帶ClassA相同的目錄下時就能夠操做a.s了class
protected其實也是同包能夠訪問(這點和default一致),另外還有個功能就是能夠被之類繼承,其實就是至關於之類也有一個protected String s;這一段代碼,只是因爲繼承而省略了,這樣能夠減小代碼量,那麼其實之類是在訪問本身的變量import
對於方法也是一樣的道理,能夠參見下面的代碼:變量
package packageA; public class ClassA { protected String s; public void print(){ System.out.println(s); } }
package packageB; import packageA.ClassA; public class ClassB extends ClassA { public static void main(String[] args){ ClassB b=new ClassB(); b.print(); b.s="classB"; b.print(); } }
結果爲null和classB,其實至關於把class的相關代碼拷貝到classB中權限