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