注意:protected表示只有在子類和同包中能夠訪問。java
須要注意的是,在其餘包中,如果建立了父類的對象,可是父類對象訪問不了本身類裏面用protected修飾的屬性,只能由子類訪問父類的protected修飾的屬性,切記!ide
而在本類本包中,則能夠訪問protected修飾的屬性!(這個結論不對,下面的是對的!)測試
package 1:this
BaseClass
:code
package package_1; // 至關於NewObject類 public class BaseClass { // protected方法 protected void protectedMethod() { System.out.println("This is BaseClass"); } }
SubClass
:對象
package package_1; public class SubClass extends BaseClass { }
MainClass
:繼承
package package_1; public class MainClass { public static void main(String[] args) { BaseClass b1 = new BaseClass(); SubClass s1 = new SubClass(); b1.protectedMethod(); // 父類的protected方法可在同一個包中的其它類中被訪問 s1.protectedMethod(); // 子類中繼承了父類的protected方法 } }
package 2:編譯器
SubClass
:it
package package_2; import package_1.BaseClass; // 繼承了不在同一個包中的父類 BaseClass public class SubClass extends BaseClass { public void testMesthod(){ BaseClass b1 = new BaseClass(); b1.protectedMethod(); // 編譯器報錯。父類的protected方法不能夠在不一樣一個包中的子類中被訪問 this.protectedMethod(); // 子類繼承了父類protected方法 } }
MainClass
:編譯
package package_2; import package_1.*; public class MainClass { public static void main(String[] args) { BaseClass b1 = new BaseClass(); b1.protectedMethod(); // 編譯器報錯。父類的protected方法不能夠在不一樣一個包中的其它類中被訪問 SubClass s1 = new SubClass(); s1.protectedMethod(); // 編譯器報錯。子類的protected方法不能夠在不一樣一個包中的其它類中被訪問 } }
protected修飾的屬性或方法,只在子類裏面友好,若不在子類裏面,而是在其餘包的測試類中,建立的子類對象,是訪問不了protected修飾的屬性或方法;只有在其餘包建立了子類,子類裏面才能使用protected修飾的屬性或方法!