怕这个问题沉了特意发帖求教,谢谢
以下是问题的来源
问题的来源
这是我的回复,有理解错的地方希望指正下,还有就是希望能解答我的疑问
首先先解答下前面有人认为以下两行代码错误
- 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]
|