为了账号安全,请及时绑定邮箱和手机立即绑定

Outer.this.b

 如果外部类和内部类具有相同的成员变量或方法,内部类默认访问自己的成员变量或方法,如果要访问外部类的成员变量,可以使用 this 关键字。
(为什么这里第一个输出访问不到外部类中的84分)

//外部类

public class HelloWorld {

    

    // 外部类中的静态变量score

    private static int score = 84;

    

    // 创建静态内部类

public    static      class SInner {

        // 内部类中的变量score

        int score = 91;

        

public void show() {

System.out.println("访问外部类中的score:" +HelloWorld.this.score            );

System.out.println("访问内部类中的score:" + score);

}

}


// 测试静态内部类

public static void main(String[] args) {

// 直接创建内部类的对象

        SInner si=new SInner();

        

        // 调用show方法

si.show();

}

}


正在回答

3 回答

System.out.println("访问外部类中的score:" +HelloWorld.this.score            );

把HelloWorld(类名)去掉,因为变量名重复,局部变量优先,但是this(代表当前变量)已经做了区分,所以this.score代表的是外部类的变量

1 回复 有任何疑惑可以回复我~
#1

PaulPierce 提问者

非常感谢!
2016-03-09 回复 有任何疑惑可以回复我~

静态内部类
 用static修饰的内部类,有以下特点:
 (1) 静态内部类不能直接访问外部类的非静态成员,但是可以通过new 外部类().成员的方式访问
 (2) 若是外部类的静态成员与静态类的成员名称相同,可以通过"类名.静态成员"访问外部类的静态成员;若名称不相同,则可直接通过成员名直接调用
 (3) 创建静态内部类的对象时,不需要外部类的对象;
     创建方法:内部类 对象名 = new 内部类();

0 回复 有任何疑惑可以回复我~

外部类中的score  是一个静态变量,不用创建对象即可访问,但是现在内部和外部类有一个同名的变量;为了区分,就需要说明score到底是哪一个,要外部的,就是HelloWorld.score    内部的直接调用     假如外部类中的score是一个非静态变量,则需要加this

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

Outer.this.b

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号