JAVA中protected属性和方法测试 |
|
www.nanhushi.com 佚名 不详 |
先说几个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 { } 总结一下: 考试大提示: 公共属性总能访问,呵呵,这个不用说了 同一包的子类,可以任意使用 同一个包的正常类,可以直接用他的实例进行访问 不同包的正常类,无法访问任何属性和方法 不同包的子类,不能使用父类实例的属性和方法 不同包的子类,不能使用其它包的子类实例的属性和方法 不同包的子类,可以直接使用父类的属性和方法 总之,不同包的子类就规规矩矩的在自己的代码里用父类的属性就行了。其它的使用都是不允许的。 http://ks.examda.com
|
|
|
文章录入:杜斌 责任编辑:杜斌 |
|
上一篇文章: JAVA基础(javaPakage) 下一篇文章: JAVA基础(Hibernate注释配置方法) |
【字体:小 大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 |
|
|