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

时间:2014-02-13 09:50:54

标签: java default-constructor member-access compiler-generated

当我写一个班级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() {}
}

7 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:6)

JLS

所述

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

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

答案 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