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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© homeless 中级黑马   /  2014-3-1 20:44  /  1340 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class Outer
  2. {
  3.        private int x=3;
  4.        class Inner
  5.        {

  6.                 void inerFunction(){
  7.                                 System.out.println(Outer.this.x);
  8.                                   System.out.println(x);

  9.                     }
  10.         }
复制代码
老毕说内部类持有外部类的引用Outer.this,那是不是就是x的前面省略了Outer.this,所以代码里的两个输出语句才是相同的,是这样吗???????

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

5 个回复

倒序浏览
class Outer
{
       private int x=3;
       class Inner
       {                  int x = 4;      //加上这句的话
                void inerFunction(){                                               System.out.println(Outer.this.x);
                           System.out.println(x);

                    }        
}

不是的,是有对外部类的变量的引用的时候,前面要加上Outer.this.
实际上x前面隐藏的是this.
只不过你的程序里内部类里没有同名变量,所以内部类调用的x仍然是外部类的,两次输出相同。
如果你加上int x = 4;

那你第二个输出结果就会使4,前面隐藏了this.

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
午夜b'Boy 来自手机 中级黑马 2014-3-1 20:54:49
藤椅
嗯,外部类的成员变量可由内部类访问,包括私有,如果是局部变量必须用final修饰才可访问,外部类成员变量与内部类变量重名要用out.this显式区分
回复 使用道具 举报
内部类在外部类的内部(很像一句废话),所以内部类是外部类的一个成员,就像外部类的方法是外部类的一个成员一样,外部类的方法是怎么访问各种数据的,内部类就是怎么访问各种数据的,如果有同名的数据类型,就指定访问外部的或内部的。
回复 使用道具 举报
乔青山 发表于 2014-3-1 20:52
class Outer
{
       private int x=3;

在作用域内,离得越近优先级越高,可以这么理解吧???若果要访问次级优先的,就要指明。
回复 使用道具 举报
homeless 发表于 2014-3-2 10:05
在作用域内,离得越近优先级越高,可以这么理解吧???若果要访问次级优先的,就要指明。 ...

嗯。。。貌似可以这么说,你理解那个意思就成,不过优先级这个词用在这里。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马