黑马程序员技术交流社区
标题:
<以解决>内部类还可以这样创建内部类对象?
[打印本页]
作者:
马林康
时间:
2012-8-14 21:39
标题:
<以解决>内部类还可以这样创建内部类对象?
本帖最后由 马林康 于 2012-8-15 14:48 编辑
public class InnerClassTest {
public static void main(String[] args){
Outer ou =new Outer();
Outer.Inner ui=ou.new Inner();
ui.function2();
Outer.Inner ui2=new Outer().new Inner();
ui2.function2();
}
}
class Outer{
private int x=3;
class Inner{
int x=4;
void function1(){
System.out.println(x);
System.out.println(Outer.this.x);
}
void function2(){
Outer.this.method();
}
}
public void method(){
Inner in =new Inner();
in.function1();
}
}
复制代码
Outer ou =new Outer();
Outer.Inner ui=ou.new Inner();
作者:
方志亮
时间:
2012-8-14 21:46
可以啊
如果测试类中想直接访问内部类,格式如下
外部类名.内部类名 对象名 = 外部类对象.内部类对象;
Outer ou =new Outer();
Outer.Inner ui=ou.new Inner();
ou在 Outer.Inner ui=ou.new Inner(); 是一个外部类的对象
作者:
杨健yj
时间:
2012-8-14 22:20
这是可以的。
内部类根据位置的不同,可以分为两种情况。
1 内部类在成员位置,在这总情况下实现内部的实例对象方法是:外部类名.内部类名 名字 = 外部类对象.内部类对象
即Outter.Inner oi = new Outter().new Inner();
你所说的那种方法其实就是变形,将一个外部类对象的引用直接付给一个变量,这当然可以。
注意:若内部类被静态修饰时,则变为外部类名.内部类名 对象名 = new 外部类.内部类()
Outter.Inner oi = new Outter.Inner();而且Outter.new Inner()不能写成new Outter().new Inner()
class Outter
{
String name;
class Inner//注意如果Inner类含有被static修饰的成员是,则Inner也必须被static修饰
//当外部类的静态方法访问内部类时,该内部类Inner也必须为静态,
{
}
public void show()
{
}
}
复制代码
2 内部类在局部时可以直接访问外部类中的成员,也可以直接访问局部成员,但是局部成员要用final修饰。
class Outter
{
public void show()
{
class Inner
{
public void showIn()
{
}
}
Inner i = new Inner();
i.showIn();
}
}
复制代码
作者:
黑马王冬冬
时间:
2012-8-15 11:29
1.关键是看该类是静态还是非静态内部类。
2.内部类分为
==>局部内部类
==>成员内部类:静态内部类和非静态内部类
在外部类以外定义内部类(静态/非静态)变量的语法格式:Outer.Inner var;
非静态内部类的对象必须寄存在外部类的对象中,在外部类以外创建非静态内部类的实例,
Outer.Inner in = new Outer().new Inner();
在外部类以外创建静态内部类的实例,此时内部类Inner使用static修饰
Outer.Inner in = new Outer.Inner();
static关键字的作用是将类的成员变成类相关,而不是实例相关。当使用static修饰一个内部类,则这个内部类属于外部类本身。
3.楼主的示例中内部类为非静态内部类,因而应该按如下格式创建内部类对象
Outer.Inner ui2=new Outer().new Inner();
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2