Java中的默认构造函数可见性
问题描述:
我对默认构造函数的实际可见性感到困惑。我一直在考虑的一本书,说明有创建一个默认的构造函数下面的代码,但物理上不显示一个(即员工()),尽管它是自动分配:Java中的默认构造函数可见性
public class Employee {
private String name;
private int zip;
private int age;
}
在另一本书我告诉下面是一个默认的构造函数,因为它不带任何参数:
public class Pet {
private String name;
private int weight;
Pet(){}
}
是后者的构造其实默认,如果我物理定义呢?还是默认的构造函数对我的代码是不可见的,因为与超类有关的东西?
编辑:我在询问写入类的物理代码。一个消息来源告诉我,默认构造函数被明确写出,另一个告诉我它不会出现在代码中,并且基本上假定它存在,尽管它对用户不明显。我的问题是,明确的是来自java证书学习指南,所以它给我造成了一些困惑。
答
默认构造函数是一个公共无参构造函数。更具体地讲它具有相同的访问级别的类,所以public
在public
类,private
在private
类等
在第二个例子中,你正在创建一个包访问级别的构造。
这意味着在同一个软件包之外的任何人都可以看到和使用该类的实例(因为它是公共类),但不能创建新类。
因为您定义了一个构造函数,所以不会创建默认构造函数。
只是没有参数不会使某些东西成为默认构造函数。编译器会自动添加一个默认构造函数,您根本没有代码。
答
如果您没有在您的类中编写任何构造函数,那么Java编译器会添加默认的无参数构造函数。 如果您在类中编写任何构造函数,那么Java编译器不会向该类添加默认无参数构造函数。
请从下面的甲骨文网站是指相同的: https://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html
但是OP在询问隐式ctor的可见性。 –