類NewObject中有protected修飾的方法或者屬性,則:
-
同一個包中:
- 可在同一個包里的子類中實例化
NewObject
類獲得對象,然后可用該對象訪問protected修飾的方法或者屬性,即.
操作訪問。 - 可在同一個包里的非子類中實例化
NewObject
類獲得對象,然后可用該對象訪問protected修飾的方法或者屬性。 - 可在同一個包里的非子類中實例化
NewObject
類的子類(該子類和NewObject
類在同一個包中)獲得對象,然后可用該對象訪問protected修飾的方法或者屬性。 - 可在同一個包里的
NewObject
類的子類中調用NewObject
類中protected修飾的方法或者屬性,即protected修飾的方法和屬性可被同一個包中的子類繼承。
- 可在同一個包里的子類中實例化
-
非同一個包中:
- 可在非同一個包里的子類中實例化
NewObject
類獲得對象,但無法用該對象問protected修飾的方法或者屬性。 - 可在非同一個包里的非子類中實例化
NewObject
類獲得對象,但無法用該對象問protected修飾的方法或者屬性。 - 可在非同一個包里的非子類中實例化
NewObject
類的子類(該子類和NewObject
類不在同一個包中)獲得對象,但無法用該對象問protected修飾的方法或者屬性。 - 可在非同一個包里的
NewObject
類的子類中調用NewObject
類中protected修飾的方法或者屬性,即protected修飾的方法和屬性可被不同一個包中的子類繼承。
- 可在非同一個包里的子類中實例化
package 1:
-
BaseClass
: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
: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方法不可以在不同一個包中的其它類中被訪問} }