在Java中,修饰符的作用是用来定义类、方法法或者变量的访问权限,它主要分两大类:



   访问修饰符: 限定类、属性或方法是否可以被程序里的其他部分访问和调用的修饰符。private - default - protected - public



   非访问修饰符: 用来修饰或者辅助功能,例如 static、final、abstract、synchronized等。



   外部类修饰符: public或者为default



   方法、属性修饰符:private、default、protected、public
   public - 公开对外部可见
   protected - 对包和所有子类可见
   default - 对类内部和同一包內
   private - 仅对类内部可见



   接着,将通过以下实例说明各个的用法



   创建一个 demo 的 包 和 Father 类,创建一个 test() 的方法 。( 级别为:default)

在java里default一般什么时候用 java中default作用_子类



   再创建一个 test 的包 和 MainTest 的 类, 当在 MainTest 里 调用 Father 类的 test() 方法时,会有报错。原因: test() 方法级别为 default,只适用于当前类和同一包內调用,当不同包调用时,违反了调用法则而导致报错。

在java里default一般什么时候用 java中default作用_子类_02



   当对 Father 类的实例化时,是没有问题的。

在java里default一般什么时候用 java中default作用_修饰符_03



   同理,如果把 Father 类 的 public 去掉,级别变成 default 的情况下,再次 进行 Father 类的实例化时,会有报错。



在java里default一般什么时候用 java中default作用_开发语言_04



在java里default一般什么时候用 java中default作用_jvm_05



   在保持 default 级别情况下,解决报错的方法有两种:



   1. 把 MainTest 这个类 直接移到 demo 包里,那么它就和 Father 类在同一个包里,符合 default 调用 法则。



在java里default一般什么时候用 java中default作用_java_06



   2. 在Father 类改回 public 级别,把 MainTest 移回 test 的包里,用 继承类的方法 extends 去继承 Father 类。



   MainTest 进行实例化后,就作为子类去继承 Father 类,调用 Father 的 test() 方法后,会出现报错。原因:default 级别情况下,当不同包的子类调用时,违反了调用法则而导致报错。



在java里default一般什么时候用 java中default作用_java_07



   为 Father 类 test() 添加 public 或者 protected 级别,就可以正常在 MainTest 类中 调用它。



在java里default一般什么时候用 java中default作用_开发语言_08



在java里default一般什么时候用 java中default作用_java_09



在java里default一般什么时候用 java中default作用_jvm_10



   当 test() 方法 设为 private, 只能在当前类里调用。



   下一期将讲解这4个级别的属性应用



在java里default一般什么时候用 java中default作用_java_11