黑马程序员技术交流社区
标题:
内部类
[打印本页]
作者:
迈特凯
时间:
2014-4-29 17:43
标题:
内部类
我不理解为什么 outer.this.x 怎么就可以被内部类调用,输出x为3的结果,outer。this不是应该指向method的吗?为什么还可以在向下指向它的内部类
QQ截图20140429173721.png
(71.4 KB, 下载次数: 35)
下载附件
2014-4-29 17:38 上传
作者:
神马
时间:
2014-4-29 18:30
本帖最后由 神马 于 2014-4-29 19:01 编辑
Outer.this.x:this指向的是new 的Outer的匿名对象。所以指的是Outer中的x。
类名.this表示 那个类名所代表的类的对象。
如果直接this.x指的就是Inner中的x,如果没有就会报错
作者:
﹊佑雨时杰↘
时间:
2014-4-29 18:51
内部类可以访问它所在外部类的数据
作者:
fatlv123456
时间:
2014-4-29 20:01
this指的是包裹this的第一层的类,就是调用this所在语句的类,outer.this自然指的是this类外部的类,即第二层的类咯。outer.this.x就是值得外部类的x
作者:
大恶魔先森~
时间:
2014-4-29 20:29
class Outer
{
int x=3;
void methdo()
{
class Inner
{
int x=4;
void function()
{
int x=5;
System.out.println(Outer.this.x);//位置1
}
}
new Inner().function();//位置2
}
}
class InnerClassDemo3
{
public static void main(String args[])
{
new Outer().method();//位置3
}
}
复制代码
位置1处Outer.this.x表示的访问外部类的变量x,Outer.this是一个外部类的引用,Outer.this.x=3如果是this.x那么x=4,如果是x,那么x=5。
1,内部类可以直接访问外部类中的成员,包括私有,之所以可以直接访问外部类中的成员,因为内部类中持有一个外部类的引用。
2,外部类要访问内部类中的成员,必须要建立内部类的对象。
作者:
大漠孤烟
时间:
2014-4-29 21:06
楼主总结的好 ,补充一点,Outer外部类访问内部类的内容先建立对象 Inner in=new Inner(); in.function(); 如果还有其他外部类 访问Outer类中的内部类成员方法,格式为:new Outer.Inner().function();
作者:
张然龙
时间:
2014-4-29 22:06
本帖最后由 张然龙 于 2014-4-29 22:26 编辑
首先 ,我要说的是上节课你没看明白 ,建议你重头看。然后我给你解释下为什么
Inner是内部类 ,是存在于Outer的内部,它的特性就是访问外部类的属性不需要调用对象。
而为了区分你调用的x变量,所以才将格式声明为Outer.this.x 。这只是格式,不必纠结。
以下代码祝你理解内部类的访问规则↓
class Outer
{
int x=1;
void method()
{
class Inner
{
int x=2;
void function()
{
int x=3;
System.out.println(Outer.this.x);//打印结果是 : 1
System.out.println(this.x);//打印结果是 : 2
System.out.println(x);//打印结果是 :3
}
}
new Inner().function();
}
}
class Demo2
{
public static void main(String args[])
{
new Outer().method();
}
}
复制代码
作者:
ς高眼光の目标
时间:
2014-4-30 01:43
Outer.this.x:this指向的是new 的Outer的匿名对象。所以指的是Outer中的x。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2