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

创建类对象

为什么在创建内部类对象之前要先创建外部类对象,而不能直接用Inner i=HelloWorld.new Inner();

正在回答

2 回答

先说=的左边 

Inner是内部类 是有所属的外部类的你标识出内部类所属的外部类,java不知道去哪里找这个内部类所以=的左边是 Outer.Inner i 

再说=的右边 

内部类你可以看成是外部类的一个成员,你调用外部类的成员时(如方法) 必须先创建外部类的对象,然后通过对象来调用,所以你调用内部类也必须有一个外部类的对象 所以=的右边应该是new Outer().new Inner()

另外.如果内部类是静态的

也就相当与是静态成员,也就就不需要创建外部对象  =的右边直接 new Outer.Inner()即可

0 回复 有任何疑惑可以回复我~
#1

鲁文杰 提问者

非常感谢!
2015-09-19 回复 有任何疑惑可以回复我~

你这里的Inner是一个静态内部类吧!你把这个内部类想象成一个普通的静态方法、或者是静态属性,那么你要怎么去调用这个方法和属性?那肯定是类名.方法(或属性):比如HelloWorld.print();那么静态内部类也是一样,你要声明它的对象,得用外部类名去调用:即HelloWorld.new Inner();

然后前面加上new:new           HelloWorld.new Inner();(不是new HelloWorld         .new Inner);

你看一下这个代码,里面有四种内部类对象的声明,把他们想成一个方法,这样一个方法该怎么去调用,那么这个类就如何去声明。代码如下:

package com.briup.pojo;


public class InnerClassTest {

    public void Test(){

     class LocalInner{                                  //局部内部类,与局部变量类似,只能在此方法里声明

    LocalInner li = new LocalInner();            //声明局部内部类

}

}

public void getStudent(){

    Adb a =  new Adb(){                              //匿名内部类,没有名字的内部类,定义类时就同时声明了

                                                                    //Adb是一个抽象类,最下面有代码

    };

}

public static class StaticInner{            //静态内部类,想象静态方法是怎么调用的

    

}

}

class MemberInner{                             //成员内部类,你可以把它理解成一个特殊的属性


}

}

public static void main(String[] args) {

StaticInner s = new           InnerClassTest.StaticInner();        //声明静态内部类

MemberInner m = (new InnerClassTest()).new MemberInner();    //声明成员内部类

}


}

---------------------------

package com.briup.pojo;

public abstract class Adb{

}

把内部类与处于同样位置的方法、属性类比,就知道如何去声明了。

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Java入门第二季 升级版
  • 参与学习       530629    人
  • 解答问题       6091    个

课程升级!以终为始告别枯燥,在开发和重构中体会Java面向对象编程的奥妙

进入课程

创建类对象

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信