[英]Safe for inner AsyncTask to access outer Activity class private member fields?
[英]Regarding access to private member of outer class
成員內部類可以訪問其外部類的成員(甚至是私有成員)。 但是,包含在方法中的本地內部類沒有。
為什么?
給我的一個原因是,對於 JVM 沒有內部類的概念,它為每個內部類創建頂級類,這就是為什么它們不應該訪問私有成員的原因,但對於它們來說仍然應該如此。
此外,本地內部類實際上可以訪問最終成員。 為什么呢?
這是一個綜合示例,哪些是可訪問的,哪些是不可訪問的:
public class Outer {
private static String staticOuterField;
private String outerField;
public void method() {
class MethodInner {
public void methodInnerMethod() {
System.out.println(staticOuterField); // OK
System.out.println(outerField); // OK
}
}
}
public static void staticMethod() {
class StaticMethodInner {
public void staticMethodInnerMethod() {
System.out.println(staticOuterField); // OK
System.out.println(outerField); // Not accessible
}
}
}
static class StaticInner {
public void staticInnerMethod() {
System.out.println(staticOuterField); // OK
System.out.println(outerField); // Not accessible
}
}
class Inner {
public void innerMethod() {
System.out.println(staticOuterField); // OK
System.out.println(outerField); // OK
}
}
}
外部靜態字段始終可以從內部類訪問。 只有當內部類綁定到外部實例時,外部實例字段才可訪問。 如果內部類是非靜態內部類或在實例方法中聲明的類,就是這種情況。
內部類背后的整個想法是,它們可以完全訪問外部類成員,也可以訪問私有成員。 這使它們與適用一般訪問規則的頂級(非內部)類不同。 final
修飾符在這里沒有任何作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.