8

当我写一堂课Widget.java

public class Widget {
    int data;
    String name;
}

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

公众就像

public class Widget {
    int data;
    String name;
    public Widget() {}
}

而默认类似于

public class Widget {
    int data;
    String name;
    Widget() {}
}
4

7 回答 7

10

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

于 2014-02-13T09:52:51.877 回答
6

正如JLS中所说

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

  1. 如果该类被声明为public,则默认构造函数被隐式地赋予访问修饰符public;
  2. 如果该类被声明为受保护,则默认构造函数被隐式赋予访问修饰符protected;
  3. 如果该类被声明为私有,则默认构造函数被隐式赋予访问修饰符 private;
  4. 否则,默认构造函数具有无访问修饰符所隐含的默认访问权限
于 2014-02-13T09:53:13.413 回答
1

由于类的可见性是公开的,因此它将始终是一个公开的构造函数。

于 2014-02-13T09:53:05.680 回答
1

这将是public因为班级可见性是公开的

public Widget() {}
于 2014-02-13T09:53:27.010 回答
1

取决于类的可见性。对于您的类默认构造函数将是公开的。

在类类型中,如果类被声明为 public,则默认构造函数被隐式赋予访问修饰符 public(第 6.6 节);如果该类被声明为受保护,则默认构造函数被隐式赋予访问修饰符 protected(第 6.6 节);如果该类被声明为私有,则默认构造函数被隐式赋予访问修饰符 private(第 6.6 节);否则,默认构造函数具有没有访问修饰符隐含的默认访问权限。

这里

于 2014-02-13T09:57:04.630 回答
1

它将是 public Widget() {}

于 2014-02-13T09:55:00.193 回答
0

如果您的类是公共的,那么默认构造函数将是公共的,因此在您的情况下,由于 Widget 类是公共的,因此编译器提供的默认构造函数也将是公共的。 看到这个

于 2014-02-13T09:54:42.467 回答