类成员的访问权限
总体介绍
java有三个访问权限修饰词,public、protected、private,如果不加以上的修饰词,则是默认的friendly(包访问权限)。
- public:公共权限,无论是谁,无论在哪,都可以访问该成员。
- protected:继承访问权限(受保护的),同一个包的类、及其子类可以访问该成员。
- private:私有权限,只允许本类内部可以访问该成员。
- friendly 友好(默认的):只允许同一个包内的类访问该成员
分析难点
public和private比较好理解,不做过多解释。protected和friendly涉及两个概念,同包类及其子类 。
子类好理解,同包类是啥呢?
- org.ludk.p1.Person与org.ludk.p1.TestMain1,这两个类是同包类。
- org.ludk.p1.Person与org.ludk.p1.p11.TestMainIfTB,这两个类不是同包类。
验证
org.ludk.p1.Person
有四个成员变量,分别为不同的变量修饰符
package org.ludk.p1;
public class Person {
private String numberId;
public String name;
protected String age;
String friend;
}
org.ludk.p1.TestMain1
public class TestMain1 {
public static void main(String[] args) {
Person person=new Person();
//private私有的,只有Person类内部可以访问
String numberId=person.numberId;
//public公有的,到哪都可以访问
String name=person.name;
//protected受保护的,同包类及其子类可以访问。
// 现在是因为org.ludk.p1.TestMain1是Person是org.ludk.p1.Person的同包类,所以可以访问。
String age=person.age;
//默认的,同包类可以访问
// 现在是因为org.ludk.p1.TestMain1是Person是org.ludk.p1.Person的同包类,所以可以访问。
String friend=person.friend;
System.out.println(numberId+name+age+friend);
}
}
org.ludk.p1.p11.TestMainIfTB
主要验证非同包类,不能访问protected和friendly
package org.ludk.p1.p11;
import org.ludk.p1.Person;
public class TestMainIfTB {
public static void main(String[] args) {
Person person=new Person();
//private私有的,只有Person类内部可以访问
String numberId=person.numberId;
//public公有的,到哪都可以访问
String name=person.name;
//protected受保护的,同包类及其子类可以访问。
// 现在是因为org.ludk.p1.p11.TestMainIfTB和org.ludk.p1.Person不是同包类,所以不能访问
String age=person.age;
//默认的,同包类可以访问
// 现在是因为org.ludk.p1.p11.TestMainIfTB和org.ludk.p1.Person不是同包类,所以不能访问
String friend=person.friend;
System.out.println(numberId+name+age+friend);
}
}
org.ludk.p1.p11.TestStudent
主要验证非同包类,但是继承了Person,算是子类。
package org.ludk.p1.p11;
import org.ludk.p1.Person;
public class TestStudent extends Person {
public void test(){
//private私有的,只有Person类内部可以访问
String numberId=this.numberId;
//public公有的,到哪都可以访问
String name=this.name;
//protected受保护的,同包类及其子类可以访问。现在是因为TestStudent是Person的子类,所以可以访问。
String age=this.age;
//默认的,同包类可以访问,不是同包类,所以不可以访问
String friend=this.friend;
System.out.println(numberId+name+age+friend);
}
}