Java中的默认构造函数可见性[复制]

问题描述 投票:0回答:2

我对默认构造函数的实际可见性感到困惑。我在一本书中给出了以下代码,该书解释了创建了一个默认构造函数,但没有实际显示一个(即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
2个回答
0
投票

默认构造函数是public no arguments构造函数。更具体地说,它具有与类相同的访问级别,因此public类中的publicprivate类中的private等。

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

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

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

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


1
投票

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

请参考以下Oracle站点:https://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html

© www.soinside.com 2019 - 2024. All rights reserved.