关于java构造器权限与类权限的问题
在Demo包中有如下文件
public class Demo {
Demo(){
System.out.println("hehe");
}
public static void main(String[] args) {
Child c = new Child();
}
}
在Demo1包中有如下文件
package Demo1;
import Demo.Demo;
public class Demo2 {
public static void main(String[] args) {
Demo d = new Demo();
}
}
然而上述代码运行是错误的问什么呢?(看看我慢慢的分析 分析错了别打我^_^!!)
在一般的情况下,我们习惯性的将类的构造器官权限相性成包访问权限或public或者根本就没有考虑过构造器权限这个问题,这是很容易出现问题的。那么这个问题我是怎么发现的呢?
其实我是在分析设计构造器过程的时候,遇到了一个设计问题,那就是在没有显示的写出构造器情况下编译器该怎么办?都知道编译器默认合成一个函数体为空的无参构造器呗。确实很简单,但是我反汇编之后发现这个合成的默认构造器和我想先的不太一样,他这个编译器生成的构造器有访问权限,并且访问权限与类的一样。在我之前编写程序一直都是public,设计编译器的人在这上边下工夫肯定有文章的。
首先解决为什么合成的默认(无参)构造器的权限与类相同呢?
这其实很简单,类的权限的作用是决定用户是否能创建对象的(假设类的设计与使用不在一个包中),public说明用户可以使用这个类,并且创建这个类的对象,那么创建对象