问题描述
class ca{ private ca(){ System.out.println("1"); } class inner{ private inner(){ new ca(); } } class inner2{ public inner2(){ new inner(); // 可以 } }}public class ae{ public ae(){ new ca() // 不可以 System.out.println("2"); } }问题:为什么 内部类可以 调用 其他内部类的构造器,而非内部类 就不能调用另外一个非内部类的构造器PS: 本人刚看 《Thinking in java》,里面好像有说道 构造器可以看成静态方法的说法,内部类可以共享外部类的Private域,但是这个构造器看不懂了,求教。 问题补充:kidding87 写道
解决方案
public class ae{ public ae(){ new ca() // 不可以 System.out.println("2"); } 1.内部类默认有一个指向外部内的引用。外部类没有指向内部类的引用。2.像上面这种代码在显示中也不存在任何意义。编译器就不让内部类创建外部类的对象,可以在外部类中申明一个成员变量为外部类对象,供内部类引用。
解决方案二:
1、ca这个类虽然定义在ae这个类的文件中,但是ca不是ae的内部类,ae也不是ca的内部类,他俩基本上没啥关系,除了在一个包内之外;2、不能再ae的构造器中访问ca的构造器,有以下几个原因; 1、ca这个类只提供了一个构造器; 2、这个构造器还是私有的。3、LZ你 new ca()语句少写了一个“;”基于以上分析:LZ的这个例子跟内部类关系不大。如何修正呢:1、为ca提供公开的构造器;2、把那个“该死的”“;”补上。建议LZ把上面的代码拷到Eclipse尝试编译一下,相信会容易明白很多。
解决方案三:
哦,看错字符了。你的类名启的真奇葩啊,首字母要大写Ca 的构造方法是私有的啊,只有内部可以访问,它之外的对象都不能访问先不看构造方法了,就单看一般的方法public class A{ private void privatehHllo(){ //sysout } public void publicHello(){ hello(); }}public class B{ public static void main(String args[]){ A a = new A(); //a.privatehHllo() 不可以调用 //a.publicHello() 可以调用 } }
解决方案四:
你看你第二个,要是能构造,这就是个死循环。