Java-protected的使用范圍


protected的使用范圍

類NewObject中有protected修飾的方法或者屬性,則:

  • 同一個包中:

    1. 可在同一個包里的子類中實例化NewObject類獲得對象,然后可用該對象訪問protected修飾的方法或者屬性,即.操作訪問。
    2. 可在同一個包里的非子類中實例化NewObject類獲得對象,然后可用該對象訪問protected修飾的方法或者屬性。
    3. 可在同一個包里的非子類中實例化NewObject類的子類(該子類和NewObject類在同一個包中)獲得對象,然后可用該對象訪問protected修飾的方法或者屬性。
    4. 可在同一個包里的NewObject類的子類中調用NewObject類中protected修飾的方法或者屬性,即protected修飾的方法和屬性可被同一個包中的子類繼承。
  • 非同一個包中:

    1. 可在非同一個包里的子類中實例化NewObject類獲得對象,但無法用該對象問protected修飾的方法或者屬性。
    2. 可在非同一個包里的非子類中實例化NewObject類獲得對象,但無法用該對象問protected修飾的方法或者屬性。
    3. 可在非同一個包里的非子類中實例化NewObject類的子類(該子類和NewObject類不在同一個包中)獲得對象,但無法用該對象問protected修飾的方法或者屬性。
    4. 可在非同一個包里的NewObject類的子類中調用NewObject類中protected修飾的方法或者屬性,即protected修飾的方法和屬性可被不同一個包中的子類繼承。

package 1:

  1. BaseClass:

    package package_1;
    // 相當於NewObject類
    public class BaseClass {
        // protected方法
        protected void protectedMethod() {
            System.out.println("This is BaseClass");
        }
    
    }
    
  2. SubClass:

    package package_1;
    
    public class SubClass extends BaseClass {
    }
    
  3. 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:

  1. 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方法
        }
    }
    
  2. 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方法不可以在不同一個包中的其它類中被訪問
        }
    }
    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM