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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. interface I           { int x = 0; }
  2. class T1 implements I { int x = 1; }
  3. class T2 extends T1   { int x = 2; }
  4. class T3 extends T2 {
  5.     int x = 3;
  6.     void test() {
  7.         System.out.println("x=\t\t"          + x);
  8.         System.out.println("super.x=\t\t"    + super.x);
  9.         System.out.println("((T2)this).x=\t" + ((T2)this).x);
  10.         System.out.println("((T1)this).x=\t" + ((T1)this).x);
  11.         System.out.println("((I)this).x=\t"  + ((I)this).x);
  12.     }
  13. }
  14. class Test {
  15.     public static void main(String[] args) {
  16.         new T3().test();
  17.     }
  18. }
  19. 结果为:

  20. x=              3
  21. super.x=        2
  22. ((T2)this).x=   2
  23. ((T1)this).x=   1
  24. ((I)this).x=    0
复制代码
只能在T3的非静态方法或者构造函数,或者初始化代码块{}里这样访问,至于为什么成员变量名称都是x,那是因为如果不同,比如有一个父类的x改成y,就没必要这样访问了,因为直接继承了,可以用this.y来访问。注意,是
((父类)this).x
不是
父类.this.x       //这个会报错 No enclosing instance of the type T2 is accessible in scope



1 个回复

倒序浏览
看过  虽然看得不是很懂
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马