A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

迈特凯

初级黑马

  • 黑马币:

  • 帖子:

  • 精华:

© 迈特凯 初级黑马   /  2014-4-29 17:43  /  1134 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我不理解为什么  outer.this.x  怎么就可以被内部类调用,输出x为3的结果,outer。this不是应该指向method的吗?为什么还可以在向下指向它的内部类


QQ截图20140429173721.png (71.4 KB, 下载次数: 10)

QQ截图20140429173721.png

7 个回复

倒序浏览
本帖最后由 神马 于 2014-4-29 19:01 编辑

Outer.this.x:this指向的是new 的Outer的匿名对象。所以指的是Outer中的x。类名.this表示  那个类名所代表的类的对象。如果直接this.x指的就是Inner中的x,如果没有就会报错
回复 使用道具 举报
内部类可以访问它所在外部类的数据
回复 使用道具 举报
this指的是包裹this的第一层的类,就是调用this所在语句的类,outer.this自然指的是this类外部的类,即第二层的类咯。outer.this.x就是值得外部类的x
回复 使用道具 举报
  1. class Outer
  2. {
  3.      int x=3;
  4.      void methdo()
  5.      {
  6.           class Inner
  7.           {
  8.                 int x=4;
  9.                 void function()
  10.                 {
  11.                          int x=5;
  12.                          System.out.println(Outer.this.x);//位置1
  13.                 }
  14.               
  15. }
  16.                  new Inner().function();//位置2
  17.       }
  18. }
  19. class InnerClassDemo3
  20. {
  21.     public static void main(String args[])
  22.     {
  23.        new Outer().method();//位置3

  24.     }
  25. }
复制代码

位置1处Outer.this.x表示的访问外部类的变量x,Outer.this是一个外部类的引用,Outer.this.x=3如果是this.x那么x=4,如果是x,那么x=5。
1,内部类可以直接访问外部类中的成员,包括私有,之所以可以直接访问外部类中的成员,因为内部类中持有一个外部类的引用。
2,外部类要访问内部类中的成员,必须要建立内部类的对象。     
回复 使用道具 举报
楼主总结的好 ,补充一点,Outer外部类访问内部类的内容先建立对象  Inner in=new Inner(); in.function();  如果还有其他外部类 访问Outer类中的内部类成员方法,格式为:new Outer.Inner().function();
回复 使用道具 举报
本帖最后由 张然龙 于 2014-4-29 22:26 编辑

首先 ,我要说的是上节课你没看明白 ,建议你重头看。然后我给你解释下为什么

Inner是内部类 ,是存在于Outer的内部,它的特性就是访问外部类的属性不需要调用对象。

而为了区分你调用的x变量,所以才将格式声明为Outer.this.x  。这只是格式,不必纠结。

以下代码祝你理解内部类的访问规则↓


  1. class Outer
  2. {
  3.         int x=1;
  4.         void method()
  5.         {
  6.                 class Inner
  7.                 {
  8.                         int x=2;
  9.                         void function()
  10.                         {
  11.                                 int x=3;
  12.                                 System.out.println(Outer.this.x);//打印结果是  : 1
  13.                                 System.out.println(this.x);//打印结果是  : 2
  14.                                 System.out.println(x);//打印结果是  :3
  15.                         }
  16.                 }
  17.                 new Inner().function();
  18.         }
  19. }
  20. class Demo2
  21. {
  22.         public static void main(String args[])
  23.         {
  24.                
  25.                  new Outer().method();
  26.         }
  27. }
复制代码



回复 使用道具 举报
Outer.this.x:this指向的是new 的Outer的匿名对象。所以指的是Outer中的x。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马