黑马程序员技术交流社区
标题:
关于内部类的问题
[打印本页]
作者:
邓超军
时间:
2012-7-14 18:30
标题:
关于内部类的问题
class Outer
{
class Inner
{
void function()
{
//如何在这个函数中访问Inner1中的x?
}
}
class Inner1
{
int x=9;
}
}
复制代码
问题在代码中
作者:
刘煜
时间:
2012-7-14 20:35
首先在你的代码的基础上完成了一个简单实例,编译和运行都是成功,你可以先试一下,如下:
class Outer
{
Outer.Inner inner1 = new Outer.Inner();
class Inner
{
void function()
{
Outer.Inner1 inner = new Outer.Inner1();//由于Inner1类本质还是一个类,要调用%
作者:
陈冲
时间:
2012-7-14 20:48
本帖最后由 陈冲 于 2012-7-14 21:12 编辑
class Outer
{
class Inner extends Inner1//使用继承就好了
{
void function(int y)
{
y=x; //如何在这个函数中访问Inner1中的x?
}
}
class Inner1
{
int x=9;
}
}
复制代码
使用继承不就好了,使用继承之后,Inner就继承了Inner1中的非私有成员x,这时就可以使用x的值了
作者:
孔令金
时间:
2012-7-14 21:02
class Outer{
public void print(){
new Inner().function();//调用这个方法可以测试打印出获取的值。
}
class Inner{
void function(){
Outer.Inner1 inner = new Outer.Inner1();
System.out.println(inner.x);
}
}
class Inner1{
int x = 9;
}
}
作者:
陈淑飞
时间:
2012-7-14 21:08
本帖最后由 陈淑飞 于 2012-7-14 21:10 编辑
class Outer
{
class Inner
{
void function()
{
//如何在这个函数中访问Inner1中的x?
Outer.Inner1 in = Outer.this.new Inner1(); //关键是这里,要拿了Inner1的对象就可以用了。
//根据成员内部类的实例规则,必须用外部类的实例来 外部类实例.new 内部类 才能产生个对象的。
//而这个函数中,也是在另一个外部内部类中,所以不能直接用this,而要用Outer.this 来获取外部类实例
System.out.println("拿到Inner1的x了,x="+in.x);
}
}
class Inner1
{
int x=9;
}
public static void main(String[] args){
Outer out = new Outer();
Outer.Inner in = out.new Inner();
in.function();
}
}
复制代码
//如何在这个函数中访问Inner1中的x?
Outer.Inner1 in = Outer.this.new Inner1(); //关键是这里,要拿了Inner1的对象就可以用了。
//根据成员内部类的实例规则,必须用外部类的实例来 外部类实例.new 内部类 才能产生个对象的。
//而这个函数中,也是在另一个外部内部类中,所以不能直接用this,而要用Outer.this 来获取外部类实例
System.out.println("拿到Inner1的x了,x="+in.x);
作者:
陆强强
时间:
2012-7-14 21:41
void function()
{
System.out.println(new Inner1().x);
}
作者:
刘煜
时间:
2012-7-14 21:55
首先在你的代码的基础上完成了一个简单实例,编译和运行都是成功,你可以先试一下,如下:
class Outer
{
Outer.Inner inner1 = new Outer.Inner();
class Inner
{
void function()
{
Outer.Inner1 inner = new Outer.Inner1();//由于Inner1类本质还是一个类,要调用它的成员,必须首先你必须实例化一个Inner1类,然后你就可以通过Inner1类对象inner调用x了。具体分析在下边
System.out.println(inner.x);
}
}
class Inner1
{
int x=9;
}
}
class InnerDemo
{
public static void main(String[] args)
{
Outer out = new Outer();
out.inner1.function();
}
}
执行的结果为:9
解释如下:
内部类相同于外部类的一个成员,和外部类的其他成员是同级的。
Java编译器在创建内部类对象时,隐式的把其外部类对象的引用也传了进去并一直保存着,这样就使得内部类对象始终可以访问其外部类对象,同时外部类成员的作用域是整个外部类,包括内部类。
所以内部类(除了静态内部类)可以访问外部类的任意成员,只不过访问的方式不同。你这里的Inner和Inner1两个内部类都是外部类Outer的成员,它们又都不是静态的,所以它们彼此可以互相访问。内部类访问外部类成员需要借助于:“外部类名.this“,但这里要访问的成员是类,如果还用外部类名.this会报错,而访问格式应该是:外部类名。
注意:要想调用内部类成员或者创建内部类对象,必须先创建外部类对象。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2