黑马程序员技术交流社区
标题:
请高手帮忙看下静态内部类实例化的问题
[打印本页]
作者:
cvnmklop
时间:
2014-10-22 18:59
标题:
请高手帮忙看下静态内部类实例化的问题
怕这个问题沉了特意发帖求教,谢谢
以下是问题的来源
问题的来源
这是我的回复,有理解错的地方希望指正下,还有就是希望能解答我的疑问
首先先解答下前面有人认为以下两行代码错误
Innerclass ic = new Innerclass();
Innerclass ic3 = new Outclass.Innerclass();
[color=rgb(177, 8, 0) !important]
复制代码
这两行代码没有错误因为前面有导入内部类
import com.kid.innerclass.Outclass.Innerclass;
[color=rgb(177, 8, 0) !important]
复制代码
我用了下eclipse看了下,说实话我很怀疑这种写法的正确性,请贴出具体来源是从哪里看的,然后你看到的代码有验证过吗?
Outclass.Innerclass ic= new Outclass.new Innerclass();
[color=rgb(177, 8, 0) !important]
复制代码
这种写法编译器就通不过,我是这么理解的 new 后面跟的是构造函数
new Outclass.new Innerclass();第一个new 后面是什么?无法理解。
那么还有一种写法,两个new正确呢?new Outclass().new Innerclass()是因为内部类非静态只有当外部类实例化后才能创建内部类对象。本质上是对象调用对象中的成员。只不过这个成员比较特殊是内部类的构造函数。
然后让我有疑问的问题就产生了为什么下面这个代码是错误的
Innerclass ic=new Outclass().new Innerclass();
[color=rgb(177, 8, 0) !important]
复制代码
照理说成员是静态的直接用类名调用是可以的,那么创建对象再调用那就更加没问题了。我试验了下在Outclass类中添加了静态成员变量
public static int num = 5;
[color=rgb(177, 8, 0) !important]
复制代码
然后创建外部类对象调用num没有问题为什么
Innerclass ic=new Outclass().new Innerclass();这个形式错了呢?
源码如下,望高手指教 以下代码用的是junit测试的
package com.kid.innerclass;
public class Outclass {
public static int num = 5;
public static class Innerclass {
Innerclass() {
System.out.println("Innerclass is comming");
}
}
}
[color=rgb(177, 8, 0) !important]
复制代码
package com.kid.innerclass;
import org.junit.Test;
import com.kid.innerclass.Outclass.Innerclass;
public class Test1 {
@Test
public void tt() {
int num = new Outclass().num;
System.out.println("num----->"+num);
Innerclass ic1 = new Innerclass();
Outclass.Innerclass ic2 = new Outclass.Innerclass();
Innerclass ic3 = new Outclass.Innerclass();
// Outclass.Innerclass ic4= new Outclass.new Innerclass();
//Innerclass ic5=new Outclass().new Innerclass();//为什么这种写法错误??
}
}
[color=rgb(177, 8, 0) !important]
复制代码
[color=rgb(177, 8, 0) !important]
作者:
不轻易
时间:
2014-11-4 00:21
才看到留言,我黑马币都给人了,现在也不多了
作者:
不轻易
时间:
2014-11-4 00:22
不过你自己也勤快点吧~~别老想着别人送,每天过来把任务都做了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2