Здравствуйте. Неоднокрано видел, как обращаются к контексту через MainActivity.
this
Я знаю что ключевое слово this применяется в java для вызова дополнительных конструкторов внутри других конструкторов и для указания полей, при совпадении имен параметров конструктора и полей класса.
Я читал, что есть еще одно использование ключевого слова this - это получение ссылки на внешний класс. Через Outer.this
или Outer.super (для получения ссылки на родитель внешнего класса). Я империческим путем попробовал сделать это. Получить ссылку на внешний класс и на класс потомок,чтобы понять на что прийдет мне ссылка, но у меня не получилось сослаться не на внешний класс ни на класс родитель с помощью ClassName.this.
Посмотрите на код
public class KeyWods {
public static void main(String[] args) {
C c = new C();
C.D d = new C().new D();
d.method();
B b = new B();
b.method();
}
}
class A {
@Override
public String toString() {
return "A";
}
}
class B extends A{
public void method(){
System.out.println(B.this.toString());
}
@Override
public String toString() {
return "B";
}
}
class C extends B{
class D {
public void method(){
System.out.println(D.this.toString());
}
@Override
public String toString() {
return "D";
}
}
@Override
public String toString() {
return "C";
}
}
Вывод
D
B
Я не получил ссылку ни на внешний класс, не на класс родитель.
Так же я посмотрел полную иерархию наследования MainActivity. Получилось вот так:
MainActivity <- AppCompatActivity <-FragmentActivity <-ComponentActivity <- Activity <-ContextThemeWrapper <- ContextWrapper <-
Context
Как так получается, что указывая MainActivity.this - мы получаем ссылку на контекст, минуя все эти классы? Это чисто фишка Андройда?