內部類可以直接訪問外部類的成員
外部類想要訪問外部類的成員,先需要例項化內部物件也就是(new內部物件)
outer.inner inner=new outer().new inner()
成員內部類持有外部類物件的引用
先建立乙個net類
public class net
public void loaddata( )
}
然後再建立ui類
public class ui
class net
}}
ui類裡面有net內部類
再建立乙個測試類test
public class test
}
輸出結果為:正在更新hello wrold
成員內部類可能出現記憶體洩漏的問題,記憶體越用越少,有些物件沒有釋放完畢。(如果你想釋放外部類物件,但是成員內部類持有外部物件的引用。因此**不了。)
建立靜態內部類
public class helloworld
}
測試靜態內部類
public static void main(string args)
}
輸出結果:
訪問外部類中的非靜態變數dynamic_score:77
訪問內部類中的score:91
net net=new net()};
bufferedreader br=new bufferedreader(new filereader(""));
注意事項:
1、匿名內部類中是不能定義建構函式的。
2、匿名內部類中不能存在任何的靜態成員變數和靜態方法。
3、匿名內部類不能是抽象的,它必須要實現繼承的類或者實現的介面的所有抽象方法。
4、沒有抽象方法的抽象類。
這裡定義了乙個人吃的抽象方法
要想在抽象類中使用匿名內部類,必須實現乙個繼承或者乙個介面
abstract class person
class child extends person
}public class demo
}
輸出結果為:
eat something
體現區域性內部類的**
class out
}new in().inprint();
}}
final int x
由上面**可知:
區域性內部類訪問方法中的變數的時候,變數需要是final修飾的
測試類
public class demo
}
執行結果為:312
在上面的**中,我們將內部類移到了外部類的方法中
內部類移到了外部類
public void print(final int x) {
class in {
在外部類的方法中再生成乙個內部類物件去呼叫內部類方法
main方法中的:
out.print(3);
注意事項:
1、此類不能使用public、private修飾。
2、其作用域被限定在宣告此類的方法中。
3、和其他內部類相比,它具有可以訪問方法引數的優點。
4、被區域性內部類使用的方法引數必須是final的。
5、區域性類只能訪問(使用)這個塊中(區域性類外)final屬性。這裡的塊包括了上面說的塊、構造器、方法。
6、在類外不可直接生成區域性內部類,要想使用區域性內部類時需要生成物件,物件呼叫方法,在方法中才能呼叫其區域性內部類。
java基礎 內部類和匿名內部類
內部類 class a 編譯後的結果 內部類編譯後都是以這種形式 外部類 內部類 如何生成內部類 class test 注意點 class a b是a的內部類,b可以使用a的成員變數,但不是繼承它,僅僅是可以使用。匿名內部類 正常的程式 inte ce aclass b class aimpl im...
java基礎 內部類
一 內部類 將乙個類定義在另乙個類的裡面,對裡面那個類就稱為內部類 內建類,巢狀類 非static內部類可以直接訪問外部類中的成員,包括私有成員。原因 因為內部類中持有了乙個外部類的引用,引用的格式為 外部類名.this 非靜態內部類不能定義static成員 1 內部類定義在外部類的成員位置上 方法...
java基礎《內部類》
一 內部類的訪問規則 1.內部類可以直接訪問外部類中的成員,包括私有 之所以可以直接訪問外部類中的成員,是因為內部類中持有了乙個外部類的引用 格式 外部類名.this 2.外部類要訪問內部類,必須建立內部類物件 訪問格式 1.當內部類定義在外部類的成員位置上,而且非私有,可以在外部其他類中,可以直接...