前言
最近在看Android源码,遇到了有关this的一个问题,自己写了一个测试小程序帮助理解。
代码
class AllBase {
void func() {
System.out.println("AllBase func");
}
}
class TestBase extends AllBase {
private AllBase mOuterContext;
TestBase() {
mOuterContext = this;
}
AllBase getInstance() {
return mOuterContext;
}
@Override
void func() {
System.out.println("TestBase func");
}
}
class TestDerived extends TestBase {
@Override
void func() {
System.out.println("TestDerived func");
}
}
public class Test {
public static void main(String[] args) {
TestDerived td = new TestDerived();
td.getInstance().func();
}
}
/*
* Output:
* TestDerived func
*/
分析
由 output 可以看出,派生类 TestDerived 调用 getInstance 返回的类实例是 TestDerived ,说明在基类 TestBase 中用于赋值的 this 实质上是派生类 TestDerived 的实例。