java的访问修饰符

  

一。Java中的访问修饰符

  

Java面向对象的基本思想之一是封装细节并且公开接口. Java语言采用访问控制修饰符来控制类及类的方法和变量的访问权限,从而向使用者暴露接口,但隐藏实现细节。访问控制分为四种级别:
(1)公众:用公共修饰的类,类属变量及方法,包内及包外的任何类(包括子类和普通类)均可以访问。
(2)保护:用保护修饰的类,类属变量及方法,包内的任何类及包外那些继承了该类的子类才能访问(此处稍后解释),保护重点突出继承;
(3)默认值:如果一个类,类属变量及方法没有用任何修饰符(即没有用公共、保护及私人中任何一种修饰),则其访问权限为默认(默认访问权限)。默
认访问权限的类,类属变量及方法,包内的任何类(包括继承了此类的子类)都可以访问它,而对于包外的任何类都不能访问它(包括包外继承了此类的子类).default重点突出包;
(4)私人:用私人修饰的类,类属变量及方法,只有本类可以访问,而包内包
癑ava的访问修饰符“
绿色代表可行红色代表不可行
重要总结:通过上面的分析,我们可以看到:

  
      <李>公共,私人和保护对我们来说没有任何异议。   <李>顶层类只能用公共访问修饰符和违约(默认)访问修饰符修饰,其中用默认修饰符修饰的类(及没有任何修饰符的类,如B类{})不能被其他包中的类继承,这也说明了违约(默认)访问修饰符突出的是包权限   <李>   

    保护:本人做了一次实验,发现在不同包的子类中,新的一个父类对象,并用该父类对象去访问父类中的用保护修饰的类属变量和方法时不能访问,而新的一个子类对象时,子类对象可以访问(说明保护修饰的类可以被其他包中的类继承)。也可以在子类重写父类的方法中使用超级关键字调用。这岂不是和上面表格中的总结(红色对勾)冲突了?本人也是百思不得其解。最后在网上找到了一个相对比较认可的解释,如下:
    保护修饰符的修饰的成员变量和方法也称为受保护的成员变量和方法,受保护的成员变量和方法可以在本类或同一个包中的其它类(包括子类)中通过类的实例进行访问,也可以被同一个包中的类或不同包中的类继承,但是不能在不同包中的其它类(包括子类)中通过类的实例进行访问。
    4。如果一个类使用公共修饰,那该类的类名必须与他所在的源文件名相同。一个. java源文件中有且只有一个公共类,顶层类只能用公众和默认修饰符(即无修饰符)修饰;

      李   <李>最后修饰的类不能被继承,没有子类。   <李>文摘修饰的类不能被实例化,必须被子类继承。类只要有一个抽象方法就必定是抽象类,但抽象类不一定要有抽象方法。
    最终总结,就一句话:保护修饰符所修饰的类(这句话中指父类)属成员变量和方法,只可以被子类访问,而不管子类是不是和父类位于同一个包中.default修饰符所修饰的类属成员变量和方法,只可被同一个包中的其他类访问,而不管其他类是不是该类的子类.protected属于子类限制修饰符,而默认属于包限制修饰符。
    默认是违约。
    没有友好,只有公共,私人,保护,违约。
    默认什么都不加,就默认是(不用把默认写出来)。
    意思就是只能由跟这个类在同一个包中的类来访问,比私人限制更少,但比保护限制更多。   

java的访问修饰符