内部类之间的 创建问题

[code="java"]
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");
}

}[/code]

问题:为什么 内部类可以 调用 其他内部类的构造器,而非内部类 就不能调用另外一个非内部类的构造器
PS: 本人刚看 《Thinking in java》,里面好像有说道 构造器可以看成静态方法的说法,内部类可以共享外部类的Private域,但是这个构造器看不懂了,求教。


慕雪6442864
浏览 464回答 4
4回答

摇曳的蔷薇

[code="java"]public class ae{public ae(){new ca() // 不可以System.out.println("2");}[/code]1.内部类默认有一个指向外部内的引用。外部类没有指向内部类的引用。2.像上面这种代码在显示中也不存在任何意义。编译器就不让内部类创建外部类的对象,可以在外部类中申明一个成员变量为外部类对象,供内部类引用。

蝴蝶不菲

你看你第二个,要是能构造,这就是个死循环。

明月笑刀无情

哦,看错字符了。你的类名启的真奇葩啊,首字母要大写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() 可以调用}}

慕沐林林

1、ca这个类虽然定义在ae这个类的文件中,但是ca不是ae的内部类,ae也不是ca的内部类,他俩基本上没啥关系,除了在一个包内之外;2、不能再ae的构造器中访问ca的构造器,有以下几个原因;1、ca这个类只提供了一个构造器;2、这个构造器还是私有的。3、LZ你 new ca()语句少写了一个“;”基于以上分析:LZ的这个例子跟内部类关系不大。如何修正呢:1、为ca提供公开的构造器;2、把那个“该死的”“;”补上。建议LZ把上面的代码拷到Eclipse尝试编译一下,相信会容易明白很多。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java