java之访问权限
理论
- public(公共访问控制):可以被所有的类访问,访问畅通无阻。
- 修饰成员变量:该成员变量对外暴露,如果该类被继承,不管在不在同一个包,该成员变量依然对外暴露。如果类之间没有被继承关系,那么不在同一包下,对外暴露。
- 修饰方法:该方法对外暴露,如果该类被继承,不管在不在同一个包,该成员变量依然对外暴露。那么不在同一包下,对外暴露。
- protect(保护访问控制):可以被这个类本身、它的子类(不管在不在同一个包)、和同一个包中所有其他类访问。
- 修饰成员变量:该成员变量对外暴露,如果该类被继承,不管在不在同一个包,该成员变量依然对外暴露。那么不在同一包下,不对外暴露。
- 修饰方法:该方法对外暴露,如果该类被继承,不管在不在同一个包,该成员变量依然对外暴露。那么不在同一包下,不对外暴露。
- default(友好访问控制):可以被这个类本身和其他类所访问。
- 修饰成员变量:该成员变量对外暴露,如果该类被继承,不管在不在同一个包,该成员变量依然对外暴露。那么不在同一包下,不对外暴露。
- 修饰方法:该方法对外暴露,如果该类被继承,不管在不在同一个包,该成员变量依然对外暴露。那么不在同一包下,不对外暴露。
- private(私有访问控制):
- 修饰成员变量:不对外暴露,只能通过类的内部方法对已经初始化的对象的属性值修改。
- 修饰方法:修饰方法也不对外暴露。
- 如果该类被继承,子类更不必谈对外暴露它的私有方法和属性,只能同过访问对外暴露的方法进行操作。
代码示例:同一包下
-
目录结构
-
Pine
public class Pine { private int age; protected String sex; public String Name; String Num; public String getNum() { return Num; } public void setNum(String num) { Num = num; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getName() { return Name; } public void setName(String name) { Name = name; } public void getMar(){ System.out.println("吸收阳光"); } protected void getWater(){ System.out.println("吸收水分"); } private void getNut(){ System.out.println("汲取营养"); } void getClean(){ System.out.println("新陈代谢"); } }
-
RedPine
public class RedPine extends Pine { private String color; public RedPine(String color) { this.color = color; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } }
-
quanxianceshi
public class quanxianceshi { public static void main(String[] args) { Pine p =new Pine(); p.setAge(20); p.setName("小红"); p.setSex("女"); //本类public成员变量 System.out.println(p.Name); //本类protect成员变量 System.out.println(p.sex); //本类public p.getMar(); //本类protect方法 p.getWater(); // p.setNum("1234"); RedPine redPine = new RedPine("red"); redPine.setNum("1234"); //父类public方法 redPine.getMar(); //子类public redPine.getColor(); //父类protect方法 redPine.getWater(); //同一包友好变量 System.out.println(p.Num); //同一包友好方法 p.getClean(); //同一包 子类 友好变量 System.out.println(redPine.Num); redPine.getClean(); } }
-
运行结果
小红 女 吸收阳光 吸收水分 吸收阳光 吸收水分 1234 新陈代谢 1234 新陈代谢
代码示例:不在同一包下
-
目录结构
-
A.java
package A; public class A { private int age; protected String sex; public String Num; int grade; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getNum() { return Num; } public void setNum(String num) { Num = num; } public int getGrade() { return grade; } public void setGrade(int grade) { this.grade = grade; } public void getWater(){ System.out.println("获取水分"); } private void getNur(){ System.out.println("获取营养"); } void getMar(){ System.out.println("获取阳光"); } }
-
B.java
package B; import A.A; public class B { public static void main(String[] args) { A a =new A(); a.setAge(12); a.setNum("1223"); a.setSex("女"); //不在同一包下 System.out.println(a.Num); a.getWater();// } }
-
结果
1223 获取水分
-
总结