JAVA中protected屬性和方法測試

字號:

先說幾個protected的使用原則,后面再看對應的例子。
    protected 的屬性和方法可以在本包和子類訪問
    非同包的子類里面,不能直接使用父類,或者其它包的子類訪問
    考試大提示: 代碼,這個是基類
    package test.base;
    /**
    * 基類,屬性和方法都是protected的。
    */
    public class Base {
    protected int testInt;
    public int publicInt;
    protected int getTestInt() {
    return testInt;
    }
    }
    下面是2個同一個包的測試代碼,一個是普通類,1個是子類。
    package test.base;
    /**
    * 測試相同包的子類。
    */
    public class TestSamePackageSubClass extends Base {
    public void test() {
    Base b = new Base(); // 使用基類
    b.publicInt = 0; // 可以訪問
    b.testInt = 1; // 訪問protected的屬性成功
    b.getTestInt(); // 訪問protected的方法成功
    }
    public void test2() {
    publicInt = 0; // 可以訪問
    testInt = 2; // 子類中可以直接用父類的屬性
    getTestInt(); // 子類中可以直接用父類的方法
    }
    }
    package test.base;
    /**
    * 測試相同包的普通類。
    */
    public class TestSamePackageNormal {
    public void test() {
    Base b = new Base(); // 使用基類
    b.publicInt = 0; // 可以訪問
    b.testInt = 1; // 訪問protected的屬性成功
    b.getTestInt(); // 訪問protected的方法成功
    }
    }
    下面是不同包的普通類和子類測試,一個普通類,2個子類
    package test.sub1;
    import test.base.Base;
    /**
    * 不同包的正常類。
    */
    class TestOtherPackageNormal {
    public void test() {
    Base b = new Base(); // 使用基類
    b.publicInt = 0; // 可以訪問
    b.testInt = 1; // 訪問protected的屬性-失敗
    b.getTestInt(); // 訪問protected的方法-失敗
    }
    public void test3() {
    TestOtherPackageSubClass b = new TestOtherPackageSubClass();
    b.publicInt = 0; // 可以訪問
    b.testInt = 3; // 直接訪問屬性-失敗
    b.getTestInt(); // 直接訪問方法-失敗
    }
    }
    package test.sub1;
    import test.base.Base;
    import test.sub2.TestOtherPackage2SubClass;
    /**
    * 不同包的子類1.
    */
    class TestOtherPackageSubClass extends Base {
    public void test() {
    Base b = new Base(); // 使用基類
    b.publicInt = 0; // 可以訪問
    b.testInt = 1; // 訪問protected的屬性失敗
    b.getTestInt(); // 訪問protected的方法失敗
    }
    public void test2() {
    publicInt = 0; // 可以訪問
    testInt = 2; // 直接用父類的屬性-成功
    getTestInt(); // 直接用父類的方法-成功
    }
    public void test3() {
    // 用另外一個package的子類。
    TestOtherPackageSubClass2 b = new TestOtherPackageSubClass2();
    b.publicInt = 0; // 可以訪問
    b.testInt = 1; // 訪問protected的屬性-失敗
    b.getTestInt(); // 訪問protected的方法-失敗
    }
    public void test4() {
    // 用另外一個package的子類。
    TestOtherPackage2SubClass b = new TestOtherPackage2SubClass();
    b.publicInt = 0; // 可以訪問
    b.testInt = 1; // 訪問protected的屬性-失敗
    b.getTestInt(); // 訪問protected的方法-失敗
    }
    }
    package test.sub1;
    import test.base.Base;
    /**
    * 不同包的子類2.
    */
    class TestOtherPackageSubClass2 extends Base {
    }
    另一個不同包的子類
    package test.sub2;
    import test.base.Base;
    /**
    * 另一個不同包的子類。
    */
    public class TestOtherPackage2SubClass extends Base {
    }
    總結一下:
    考試大提示: 公共屬性總能訪問,呵呵,這個不用說了
    同一包的子類,可以任意使用
    同一個包的正常類,可以直接用他的實例進行訪問
    不同包的正常類,無法訪問任何屬性和方法
    不同包的子類,不能使用父類實例的屬性和方法
    不同包的子類,不能使用其它包的子類實例的屬性和方法
    不同包的子類,可以直接使用父類的屬性和方法
    總之,不同包的子類就規(guī)規(guī)矩矩的在自己的代碼里用父類的屬性就行了。其它的使用都是不允許的。