首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

关于内部类的实例化,该如何解决

2012-12-14 
关于内部类的实例化public class Outer {public class Inner{}void f(){new Inner()//此处为什么不用创建

关于内部类的实例化


public class Outer {
public class Inner{

}
void f(){
new Inner();//此处为什么不用创建外部类实例就能创建内部类实例
}
static void g(){
//在静态方法中为什么要先创建外部类实例才能创建内部类的实例

Outer.Inner in = new Outer().new Inner();
}
}


[最优解释]
Outer outerObject = new Outer();

Inner innerObject = new outerOjbect.Inner();

Inner.class 对象属于 outerOjbect对象,不属于 Outer.class 对象 

-----------------------
如果是 static Inner

Inner.class 对象不属于 outerOjbect对象,属于 Outer.class 对象
Inner innerObject = new Outer.Inner();

[其他解释]
void f(){
        new Inner();//此处为什么不用创建外部类实例就能创建内部类实例
    }
因为这相当于是外部类的成员函数,隐含了this

static void g(){
        //在静态方法中为什么要先创建外部类实例才能创建内部类的实例
        
        Outer.Inner in = new Outer().new Inner();
    }
因为static函数不输入某个具体的对象,而是属于整个类。所以必须得创建外部类的一个对象

[其他解释]
恩,完全可以将new Inner()当成是一个内部的方法来看待,因为在定义的时候采用的是非static 的所以在static方法中必须要新建一个实例在创建对应实例的内部类。而在non-static中相当于采用了this.
[其他解释]
public class Outer {
    public class Inner{
        
    }
    void f(){
        这里可以直接引用外部类的属性
    }
    static void g(){
        //静态方法,是不可以调用非静态的属性;静态代码块是在类加载的时候,就开始加载了
        
        Outer.Inner in = new Outer().new Inner();
    }
}

[其他解释]
没看懂 关注此贴 
只会用不知道为什么
[其他解释]
static的方法不能访问非static的内部类,这跟static方法不能访问非static成员变量是同个道理。但这里如果定义一个新的对象,然后用对象来访问内部类是被允许的。
[其他解释]
外部对象没实例化,如何调用内部对象?
[其他解释]
引用:
Java code

public class Outer {
    public class Inner{
        
    }
    void f(){
        new Inner();//此处为什么不用创建外部类实例就能创建内部类实例
    }
    static void g(){
        //在静态方法中为什么要先创建外部类实例才能创建……

这个有啥疑问呢
[其他解释]
认真一看好像有问题诶,这题
[其他解释]
    void f(){


        new Inner();
    }
这个是非静态方法,也就是没有static修饰,所以要引用这个方法,应该是实例化外部类,才可以引用
   static void g(){
        
        Outer.Inner in = new Outer().new Inner();
    }
这个是静态方法,要使用它可以直接这样:Outer.g();这样才对的


[其他解释]
太杂了,没看太明白
[其他解释]
路过,学习...
[其他解释]
总结起来就是:第一个方法是普通方法,暗含了一个this引用,普通方法是不能通过类名.方法名引用的,所以只有创建实例的时候才可以用,也就是有this的引用,所以在创建内部类的实例时,外部类的实例必须已经存在。。。

热点排行