Java中的权限修饰符
Java 中的访问权限修饰符主要是用来控制类、接口、方法和变量等成员的可见性和访问范围。Java 中有四种不同的访问权限修饰符,分别是
public
、protected
、default
和private
。封装(信息隐藏)是面向对象重要的特性之一,这也是访问权限修饰符存在的目的(实现信息的隐藏)。
1.public
如果将类的成员变量或者成员方法的访问权限设置为 public,那么除了本类当中可以使用这些数据,还可以在子类和其他包的类中使用这些数据。也就是说它可以在任何一个类中,不管同不同包,任意使用。方法一般使用 public 用于被调用。
- 构造方法使用 public:方便创建对象。
//父类构造器
public father(int age){
System.out.println(age);
}
//子类构造器
public son(int age){
//默认是super()调用父类的无参构造器
super(28);
System.out.println("son:"+age);
}
-
成员方法使用 public:方便调用方法。
2.private
如果将类的成员变量或者成员方法的访问权限设置为 private,那么该成员变量只能在本类中使用,在子类中是不可见的,并且对其他包的类也是不可见的。如果一个类的访问权限被设置为 private,那么这个类将会隐藏其内的所有数据,避免用户直接访问它。属性通常使用 private 封装起来。但是被 private 修饰的成员可以通过 set 和 get 方法向外界提供访问方式。
public class test {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
3.protected
如果将类的成员变量或者成员方法的访问权限设置为 protected,可以被同一包中的所有类和不同包中的子类访问。注意这里的不同包中的子类是严格限制的,即在不同包的子类中可以通过子类的对象访问父类的 protected 成员变量和方法,反而不能通过父类的对象访问父类的 protected 成员变量和方法。例如:
//父类
package p1;
public class People {
protected String name;
protected void sing(){
System.out.println(name+"在唱歌");
}
}
//子类
package p2;
import p1.People;
public class Student extends People {
public void test(){
// 在子类中直接使用People的protected成员变量和方法,可行
name="amber";
sing();
People people = new People();
}
public static void main(String[] args) {
Student student = new Student();
student.test();
System.out.println("--------------------");
// 在子类中通过子类的对象访问People的protected成员变量和方法,可行
student.name="doris";
student.sing();
// 在子类中通过父类的对象访问父类People的protected成员变量和方法,不行
// people.name="tina";
// people.sing();
}
}
会被子类继承的方法,通常使用 protected。
4.default
defalut 即不写任何关键字,它可以修饰类,成员变量,成员方法,构造方法。被默认权限修饰后,其只能被本类以及同包下的其他类访问。
5.区别总结
修饰符 | 本类 | 同一个包下的其他类 | 其他包类的子类 |
---|---|---|---|
public | √ | √ | √ |
protected | √ | √ | √ |
default | √ | √ | |
private | √ |
6.作用域最小原则
一般而言,应使变量的作用域最小化,把变量引用点尽可能集中在一起,从而能够对变量施加控制。将局部变量的作用域最小化,可以增强代码的可读性和可维护性,并降低出错的可能性。简单点说就是如果能有 private 的就用 private,如果不满足需求就把等级扩大一级,以此类推,这样就可以把数据封装起来,有助于程序的安全性的提高。
转载自:https://juejin.cn/post/7383006856664842259