A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© cvnmklop 中级黑马   /  2014-10-22 18:59  /  1176 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

怕这个问题沉了特意发帖求教,谢谢

以下是问题的来源
问题的来源
这是我的回复,有理解错的地方希望指正下,还有就是希望能解答我的疑问

首先先解答下前面有人认为以下两行代码错误
  • 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]

评分

参与人数 1黑马币 +12 收起 理由
不轻易 + 12 淡定

查看全部评分

2 个回复

倒序浏览
才看到留言,我黑马币都给人了,现在也不多了
回复 使用道具 举报
不过你自己也勤快点吧~~别老想着别人送,每天过来把任务都做了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马