鲁文杰
2015-09-17 21:07
为什么在创建内部类对象之前要先创建外部类对象,而不能直接用Inner i=HelloWorld.new Inner();
先说=的左边
Inner是内部类 是有所属的外部类的你标识出内部类所属的外部类,java不知道去哪里找这个内部类所以=的左边是 Outer.Inner i
再说=的右边
内部类你可以看成是外部类的一个成员,你调用外部类的成员时(如方法) 必须先创建外部类的对象,然后通过对象来调用,所以你调用内部类也必须有一个外部类的对象 所以=的右边应该是new Outer().new Inner()
另外.如果内部类是静态的
也就相当与是静态成员,也就就不需要创建外部对象 =的右边直接 new Outer.Inner()即可
你这里的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{
}
把内部类与处于同样位置的方法、属性类比,就知道如何去声明了。
Java入门第二季 升级版
530643 学习 · 6091 问题
相似问题