【问题标题】:Default Constructor Visibility in Java [duplicate]Java中的默认构造函数可见性[重复]
【发布时间】:2016-02-11 12:46:54
【问题描述】:

我对默认构造函数的实际可见性感到困惑。我在一本书中得到了以下代码,它解释了创建了一个默认构造函数,但实际上并没有显示一个(即 Employee()),尽管它是自动分配的:

public class Employee {
private String name;
private int zip;
private int age;
}

在另一本书中,有人告诉我以下是默认构造函数,因为它不带参数:

public class Pet {
private String name;
private int weight;

Pet(){}
}

如果我在物理上定义后一个构造函数,它实际上是默认的吗?还是因为与超类有关的某些事情,我的代码中的默认构造函数是否像第一个示例一样不可见?

编辑:我问的是写入类的物理代码。一个消息来源告诉我默认构造函数已明确写出,另一个消息来源告诉我它不会出现在代码中,并且基本上假定存在,尽管它对用户来说并不明显。我的问题是明确的问题来自 java 证书学习指南,所以这给我造成了一些困惑。

【问题讨论】:

    标签: java default-constructor


    【解决方案1】:

    默认构造函数是 public 无参数构造函数。更具体地说,它与类具有相同的访问级别,因此 publicpublic 类中,privateprivate 类中,等等。

    在您的第二个示例中,您正在创建一个包访问级别构造函数。

    这意味着同一个包之外的任何人都可以看到和使用该类的实例(因为它是一个公共类),但不能创建新的。

    因为你已经定义了构造函数,所以不会创建默认构造函数。

    仅仅没有参数并不能使某些东西成为默认构造函数。编译器会自动添加默认构造函数,您根本没有代码。

    【讨论】:

      【解决方案2】:

      如果您没有在您的类中编写任何构造函数,那么 Java 编译器会添加默认的无参数构造函数。 如果您在类中编写任何构造函数,则 Java 编译器不会向该类添加默认的无参数构造函数。

      请参考以下 Oracle 网站中的相同内容: https://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html

      【讨论】:

      • 但是 OP 正在询问隐式 ctor 的可见性。
      猜你喜欢
      • 2019-08-07
      • 1970-01-01
      • 2012-06-22
      • 1970-01-01
      • 2014-03-24
      • 2013-06-08
      • 2015-06-26
      • 2016-05-09
      相关资源
      最近更新 更多