您的位置:首页 > 编程语言 > Java开发

java中protect属性用法总结

2015-10-13 22:00 645 查看
测试代码:

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: