您的位置:首页 > 其它

创建普通内部类对象与创建嵌套类对象的不同

2015-12-09 16:05 204 查看
为什么需要使用内部类?

使用内部类的原因:每个内部类都能独立的继承自一个(接口的)实现,所以无论外部类是否已经继承了某个(接口的)的实现,对内部类都没有影响。实际上内部类有效的实现了“多重继承”,就是说,内部类允许继承多个非接口类型。

我们知道内部类自动拥有对外部类所有成员的访问权,那么这是如何做到的吗?当某个外部类对象创建了一个内部类对象时,此内部类对象必定会秘密的捕获一个指向那个外部类对象的引用。然后,在你访问外部类的成员时,就是用那个引用来选择外部类的成员。当然这些细节是编译器处理,并且这里的内部类是非static的。

要创建内部类的对象,不是按照本来想的方式,去引用外部类的名字DotNew,而是必须使用外部类的对象来创建内部类的对象。如下面的例子:

public class DotNew{

public class Inner{

}

public static void main(String[] args){

DotNew dn =new DotNew();

DotNew.Inner dni=dn.new Inner();

}

}

但是,如果你创建的是嵌套类(静态内部类),那么就不需要外部类对象引用,如下面的例子:

package innerclassdotnew;

public class InnerDotNew {

InnerDotNew(){
System.out.println("InnerDotNew");
}

static class StaticInner{
StaticInner(){
System.out.println("static inner class");
}
}
class Inner{
Inner(){
System.out.println("normal Inner class");
}
}

public static void main(String[] args){
InnerDotNew idn=new InnerDotNew();
InnerDotNew.Inner dnInner=idn.new Inner();
/*compile error:
No enclosing instance of type InnerDotNew is accessible.
Must qualify the allocation with an enclosing instance of type InnerDotNew
(e.g. x.new A() where x is an instance of InnerDotNew).*/
//InnerDotNew.Inner dnInner=new Inner();
InnerDotNew.StaticInner staticInner =new StaticInner();
}


}

/*output/

InnerDotNew

normal Inner class

static inner class
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: