当我写一个班级Widget.java
public class Widget {
int data;
String name;
}
编译器生成的构造函数是 public 还是 default ?
公众会像
public class Widget {
int data;
String name;
public Widget() {}
}
而默认类似于
public class Widget {
int data;
String name;
Widget() {}
}
答案 0 :(得分:9)
这取决于您的类可见性。编译器使用类可见性并生成具有相同可见性的无参数默认构造函数
答案 1 :(得分:6)
如JLS
所述如果某个类不包含构造函数声明,则会自动提供不带参数的默认构造函数:
答案 2 :(得分:1)
由于类可见性是公开的,因此它始终是公共构造函数。
答案 3 :(得分:1)
由于班级可见性为公共
,因此public
public Widget() {}
答案 4 :(得分:1)
会的 公共小工具() {}
答案 5 :(得分:1)
取决于课程的可见度。对于你的班级,dafault构造函数将是公开的。
在类类型中,如果该类声明为public,则默认构造函数被隐式赋予访问修饰符public(§6.6);如果该类被声明为protected,则默认构造函数被隐式赋予访问修饰符protected(§6.6);如果该类被声明为private,则默认构造函数被隐式赋予访问修饰符private(§6.6);否则,默认构造函数具有默认访问权限隐含的默认访问权限。
来自here。
答案 6 :(得分:0)
如果您的类是公共的,那么默认构造函数将是公共的,因此在您的情况下,由于Widget类是公共的,因此编译器提供的默认构造函数也是公共的。 See this