java中的四种修饰符

时间:2022-04-24 21:06:28

 

  在编程过程中,经常会遇到四种修饰符来控制访问权限。之前对这个知识点没有研究过,一直是一知半解,每次遇到问题都模棱两可,不能给出一个确切的答案。近几天系统的看了看,也有了自己的一点心得体会。

正文:

  先上总纲:

修饰符 本类 本包 继承类 其他类/其他包
private      
default(friendly)    
protected  
public

  注意:

    在java中private和protected是不能修饰类的,只能修饰方法和变量,在thinking in java这本书里也有提到。而 public 和 默认 则没有限制。

  private:私有修饰符

    这个修饰符很简单,被它修饰的变量和方法(包括静态和成员),都只能在类的内部使用,并且不能被继承。在类的外部即便是通过类本身去调用静态变量/方法,在语法编译也是不能通过的。所以,如果想要使用被private修饰的东西,必须提供可以被其他类调用的方法来间接的操作。当然,你要让哪些类可以间接操作,依然可以用修饰符来控制权限。

  default:默认修饰符(友好修饰符)

    使用这个修饰符的变量和方法,只能在本包中使用。说白了,java中的包其实就是一个个文件夹。假定现在有A,B两个类,其中A类有使用默认修饰符的属性和方法,当A,B两个类处于同一个文件夹时,那么B类可以使用这些属性和方法,但当A,B不在同一个文件夹时,那么B就不能使用。

    使用该修饰符修饰类的时候,说明该类只能被在同一包的其他类继承,创建和使用,其他包中的类是不能继承的,而且也不能使用该类。

    当使用该修饰符修饰变量和方法,而类本身用public修饰时,这些变量和方法只能被同一包的其他类继承和使用。不同包的类即使继承了该类,但用default修饰的变量和方法也不能被继承和使用。

  protected:受保护修饰符 

    这个修饰符给我的感觉就像是专门为了继承而存在的。因为它和默认修饰赋的作用域基本一致,只是增加了可以在子类中使用的权限。所以,A类中被protected修饰的变量和方法,可以被其子类继承和使用(在不在一个包都无所谓)。而对于没有继承A类的类,它的操作权限参考默认权限就可以了。

    (但是protected不能修饰类,我没有搞清楚为什么,因为感觉是可以的。只能先留在这,等以后清楚了,再修改。)

  public:公共修饰符 

    我大public就不说了,公共的嘛,谁都可以来掺一脚,哈哈。