编译器生成的默认构造函数是公共的吗?

tow*_*owi 7 java default-constructor compiler-generated member-access

当我写一堂课 Widget.java

public class Widget {
    int data;
    String name;
}
Run Code Online (Sandbox Code Playgroud)

编译器生成的构造函数是公共的还是默认的

公众会是这样的

public class Widget {
    int data;
    String name;
    public Widget() {}
}
Run Code Online (Sandbox Code Playgroud)

而默认类似于

public class Widget {
    int data;
    String name;
    Widget() {}
}
Run Code Online (Sandbox Code Playgroud)

Kum*_*nav 9

这取决于您的类可见性.编译器使用类可见性并生成具有相同可见性的无参数默认构造函数


Abi*_*san 6

正如JLS所说

如果类不包含构造函数声明,则会自动提供不带参数的默认构造函数:

  1. 如果该类被声明为public,则默认构造函数被隐式赋予访问修饰符public;
  2. 如果该类被声明为protected,则默认构造函数被隐式赋予访问修饰符protected;
  3. 如果该类被声明为private,则默认构造函数被隐式赋予访问修饰符private;
  4. 否则,默认构造函数具有无访问修饰符隐含的默认访问权限