測試代碼:
-
pojo類:
package com.lky.h1; public class Base { private Integer id; protected String name; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Base [id=" + id + ", name=" + name + "]"; } }
-
test1類
package com.lky.h1; import org.junit.Test; /** * @ClassName: test1 * @Description: 同一個包內測試protect屬性 * @author Administrator * @date 2015年10月13日 * */ public class test1 extends Base{ /** * @Title: testBase * @Description: 父類本身的訪問 */ @Test public void testBase(){ Base base=new Base(); base.setId(10); // base.id=9; 同一個包內private屬性不能直接訪問 base.name="lky";//同一個包內protect屬性可以直接訪問 System.out.println(base); } /** * @Title: testExends * @Description: 子類的訪問 */ @Test public void testExends(){ test1 a=new test1(); a.name="lky";//protect屬性在子類中可見,可以直接訪問 a.setId(10);//private屬性在子類中不可見,不能直接訪問 System.out.println(a); } }
-
test2類
package com.lky.h2; import org.junit.Test; import com.lky.h1.Base; public class test2 extends Base { @Test public void testBase() { Base base = new Base(); // base.name="lky";不能直接訪問 // base.id=10; 不能直接訪問 base.setName("lky"); base.setId(10); System.out.println(base); } @Test public void testExends() { test2 a = new test2(); a.name = "lgh"; //可以直接訪問 // a.id = 10; //不能訪問 a.setId(10); System.out.println(a); } }
總結:假設有類A和類B,且A類中有一個值屬性為protect
- 若A和B在同一個包下:在B類中是可以通過A直接訪問A中的protect屬性,實驗如test1的testBase
- 若A和B在同一個包下,並且B繼承於A:在B類中也是可以直接訪問A中的protect屬性,實驗如test1的testExtends
- 若A和B不在同一個包下:在B類中是不可以通過A來訪問A中的protect屬性,即該屬性在B類中不可見,實驗如test2中testBase
- 若A和B不在同一個包下,並其B繼承於A:在B類中是可以訪問到A中的protect屬性,實驗如test2的testExtends
