这个问题在这里已有答案:
我对默认构造函数的实际可见性感到困惑。我在一本书中给出了以下代码,该书解释了创建了一个默认构造函数,但没有实际显示一个(即Employee()),尽管它被自动分配:
public class Employee {
private String name;
private int zip;
private int age;
}
在另一本书中,我被告知以下是默认构造函数,因为它不带参数:
public class Pet {
private String name;
private int weight;
Pet(){}
}
如果我在物理上定义它,后面的构造函数实际上是默认的吗?或者是我的代码看不到的默认构造函数,如第一个例子中那样,因为与超类相关的东西?
编辑:我问的是写入类的物理代码。一个来源告诉我默认构造函数是明确写出来的,另一个来源告诉我它不会出现在代码中,并且基本上假定它存在,尽管它对用户来说并不明显。我的问题是,明确的一个来自java证书学习指南,所以它给我带来了一些困惑。
默认构造函数是public no arguments构造函数。更具体地说,它具有与类相同的访问级别,因此public
类中的public
,private
类中的private
等。
在第二个示例中,您将创建一个包访问级别构造函数。
这意味着同一个包之外的任何人都能够查看和使用该类的实例(因为它是一个公共类)但不能创建新的实例。
因为您已经定义了构造函数,所以不会创建默认构造函数。
只是没有参数不会使某些东西成为默认构造函数。编译器会自动添加默认构造函数,您根本没有代码。
如果您没有在类中编写任何构造函数,那么Java编译器会添加默认的无参数构造函数。如果在类中编写任何构造函数,那么Java Compiler不会向类添加缺省的无参数构造函数。
请参考以下Oracle站点:https://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html