Java 访问修饰符大全详解

鉴于笔试面试总会遇到,决心仔细认真梳理一下:

1:涉及的关键字:public,default(表示缺省),protected,private,static,final,abstract.

2:关键字含义大家都懂,现在逐场景总结他们的使用场合。

3:修饰类时:

  1.普通类:public,default,final

       public类:此类工程内可见

        1.一个.java文件中可以没有public类,如有,public类类名必须和文件名相同

            

           (此处其实不需要非要有类“Main")

        2.当一个.java文件有public类且有程序入口时public static void main(String[] args),入口必须在public类中。

            

          个人理解:当加载一个类文件时,它会按文件名寻找public类,如果找到了,则只会在public类中寻找程序入口,否则依次寻找每个类。

       default:此类具有包内可见

       final:此类不允许继承

  2.抽象类public,default,abstract

      特点:1.无法创建此类的对象,除非子类实现所有抽象方法,否则子类还是抽象类。

         2.可以没有任何抽象方法,用于阻止创建某个类的对象

      public,default用法同上,修饰类时abstract和final互斥

  3.接口:写也是public abstract,不写也默认public abstract.

      当手动写上public时,如果.java文件名和接口名不同,则报错。

  4.内部类:

4:用于修饰属性时:

    所有场景public,default,protected,private,static,final 都能任意组合使用。

    顺序:public static final int 或 public final static int .

    关于接口的属性:

        1.默认是public static final的。

        2.必需被常量或非常量表达式初始化。

5:用于修饰方法时:

    普通类:public,default,protected,private,static,final 都能任意组合使用

        final方法表示不能覆盖,而非不能重载,重载指函数签名不同(函数名,参数类型,顺序,个数,)

    抽象类:

        抽象函数只能用设置可见性,包括(public,protected,default)。

    接口:

        java8中给接口里的方法增加了default(真default)和static关键字。

        接口中的非抽象方法:

          1.静态方法:可以同static 或public static 修饰,默认是public的,即使不写public。

          2.非静态方法:可以用default(真default)或public default修饰,默认是public的。当实现类覆盖此方法时,也必须是public的,因为覆盖方法不能减小方法可见性。

        接口中的抽象方法:

          只能且默认是 public abstract

    

总结:

  对于类,只能用public ,default, abstract,final修饰。当用abstract修饰时,即为抽象类。public类应定义在自己的文件中。

  对于属性:常规类public ,default, protected ,private,final,static均可,接口中的属性默认public static final.

  对于方法:public ,default, protected ,private,final,static abstract均可,final与abstract互斥,抽象方法中能用public或protected修饰,在接口中只有public

原文地址:https://www.cnblogs.com/lshao/p/9017127.html