- interface I { int x = 0; }
- class T1 implements I { int x = 1; }
- class T2 extends T1 { int x = 2; }
- class T3 extends T2 {
- int x = 3;
- void test() {
- System.out.println("x=\t\t" + x);
- System.out.println("super.x=\t\t" + super.x);
- System.out.println("((T2)this).x=\t" + ((T2)this).x);
- System.out.println("((T1)this).x=\t" + ((T1)this).x);
- System.out.println("((I)this).x=\t" + ((I)this).x);
- }
- }
- class Test {
- public static void main(String[] args) {
- new T3().test();
- }
- }
- 结果为:
- x= 3
- super.x= 2
- ((T2)this).x= 2
- ((T1)this).x= 1
- ((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
|
|