黑马程序员技术交流社区

标题: 内部类 [打印本页]

作者: 迈特凯    时间: 2014-4-29 17:43
标题: 内部类
我不理解为什么  outer.this.x  怎么就可以被内部类调用,输出x为3的结果,outer。this不是应该指向method的吗?为什么还可以在向下指向它的内部类


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

QQ截图20140429173721.png

作者: 神马    时间: 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
  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,外部类要访问内部类中的成员,必须要建立内部类的对象。     
作者: 大漠孤烟    时间: 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  。这只是格式,不必纠结。

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


  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. }
复制代码




作者: ς高眼光の目标    时间: 2014-4-30 01:43
Outer.this.x:this指向的是new 的Outer的匿名对象。所以指的是Outer中的x。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2