一直对public protected 默认 还有private的可见性理解的不透彻,用代码实践并记录下来,加深自己的理解。
public | protected | 默认 | private |
---|---|---|---|
全部类可见 | 同包的类可见,不同包子类可见 | 同一个包类可见 | 本类可见 |
假设定义一个两个类 class A,class B ,在B类中,如果A类的实例能够访问的成员变量或者方法就叫可见,不可见就是访问不到。
//Person 类
public class Person {
private String privateName;
protected String protectedName;
public String publicName;
String mName;
}
//测试类
public class Test {
public static void main(String[] args) {
Person person = new Person();
person.mName = "";
person.protectedName = "";
person.publicName = "";
}
}
//在同一个包中,private修饰的只能在本类中访问,其他修饰符修饰的可以在同一个包中访问到。
package com.example.ahl.one;
public class Person {
private String privateName;
protected String protectedName;
public String publicName;
String mName;
}
package com.example.ahl.two;
import com.example.ahl.one.Person;
public class Test {
public static void main(String[] args) {
Person person = new Person();
person.publicName = "";
}
}
//不同包中,person对象引用只能访问public修饰的成员变量
//就是说在不同的包,只有用public 修饰,才能让其实例变量访问到,protected除外。
下面验证算是比较特殊的protected修饰符
package com.example.ahl.one;
//Person 类
public class Person {
private String privateName;
protected String protectedName;
public String publicName;
String mName;
}
package com.example.ahl.two;
import com.example.ahl.one.Person;
public class Test extends Person{
public static void main(String[] args) {
SubPerson subPerson = new SubPerson();
subPerson.publicName = "";
}
}
package com.example.ahl.two;
import com.example.ahl.one.Person;
public class SubPerson extends Person {
public static void main(String[] args) {
SubPerson subPerson = new SubPerson();
subPerson.protectedName = "";
subPerson.publicName = "";
}
}
在SubPerson类 能够访问到protected修饰的成员变量,在Test类中访问不到,说明在不同的包,父类的实例能在子类中访问protected修饰的成员变量或者方法。
总结:今天是第一次写日记,有好几个感悟,很多知识看完了,感觉自己理解了,但是在实践写代码的过程中还是会出现问题,或者说看完了知识,自己还是什么东西都写不出来,所以在以后学习完了,一定把自己理解的记录下来,第一可以记录自己的学习历程,完善自己的知识结构,第二,能发现很多的不足,更正一些理解上的错误。第三可以锻炼自己的语言组织能力。再一个就是说对同一个知识点多次做总结和实践可以让自己理解的更深一些。