【问题标题】:Will the compiler-generated default constructor be public?编译器生成的默认构造函数会公开吗?
【发布时间】:2014-03-12 02:48:34
【问题描述】:

当我写课时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() {}
}

【问题讨论】:

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


    【解决方案1】:

    取决于类的可见性。因为你的类默认构造函数将是公开的。

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

    来自here

    【讨论】:

      【解决方案2】:

      这将是 公共小部件() {}

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          它将是public,因为类可见性是公开的

          public Widget() {}
          

          【讨论】:

            【解决方案5】:

            JLS中所说

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

            1. 如果类被声明为 public,那么默认构造函数是 隐式给出访问修饰符 public;
            2. 如果类被声明为受保护,则默认构造函数为 隐式给定访问修饰符 protected;
            3. 如果类声明为私有,则默认构造函数为 隐式给出访问修饰符 private;
            4. 否则,默认构造函数具有隐含的默认访问权限 没有访问修饰符

            【讨论】:

              【解决方案6】:

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

              【讨论】:

                【解决方案7】:

                这取决于您的类可见性。编译器使用类可见性并生成具有可见性相同

                的无参数默认构造函数

                【讨论】:

                  猜你喜欢
                  • 2018-10-04
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2014-06-16
                  • 2018-10-01
                  • 1970-01-01
                  • 2020-09-25
                  相关资源
                  最近更新 更多