为了账号安全,请及时绑定邮箱和手机立即绑定

内部类之间的 创建问题

内部类之间的 创建问题

慕雪6442864 2019-03-14 18:15:00
[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域,但是这个构造器看不懂了,求教。
查看完整描述

4 回答

?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

[code="java"]
public class ae{

public ae(){

new ca() // 不可以

System.out.println("2");

}

[/code]

1.内部类默认有一个指向外部内的引用。外部类没有指向内部类的引用。
2.像上面这种代码在显示中也不存在任何意义。编译器就不让内部类创建外部类的
对象,可以在外部类中申明一个成员变量为外部类对象,供内部类引用。


查看完整回答
反对 回复 2019-04-26
?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

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


查看完整回答
反对 回复 2019-04-26
?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

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

}


查看完整回答
反对 回复 2019-04-26
?
慕沐林林

TA贡献2016条经验 获得超9个赞

1、ca这个类虽然定义在ae这个类的文件中,但是ca不是ae的内部类,ae也不是ca的内部类,他俩基本上没啥关系,除了在一个包内之外;
2、不能再ae的构造器中访问ca的构造器,有以下几个原因;
1、ca这个类只提供了一个构造器;
2、这个构造器还是私有的。
3、LZ你 new ca()语句少写了一个“;”

基于以上分析:LZ的这个例子跟内部类关系不大。

如何修正呢:
1、为ca提供公开的构造器;
2、把那个“该死的”“;”补上。

建议LZ把上面的代码拷到Eclipse尝试编译一下,相信会容易明白很多。


查看完整回答
反对 回复 2019-04-26
  • 4 回答
  • 0 关注
  • 462 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信