標籤:his log lin system ... 實現 參數 turn 那是
/*為什麼內部類能直接存取外部類中成員呢?那是因為內部類持有了外部類的引用。 外部類名.this*/
class Outer{ int num = 3; class Inner { int num = 4; void show() { int num = 5; System.out.println(Outer.this.num); } } void method() { new Inner().show(); }}class InnerClassDemo2 { public static void main(String[] args) { new Outer().method(); }}
局部內部類/*局部內部類可以存放在局部位置上。 內部類在局部位置上只能訪問局部中被final修飾的局部變數。*/
class Outer{ int num = 3; Object method() { final int x = 9; class Inner { public String toString() { return "show ..."+x; } } Object in = new Inner(); return in;//0x0045// in.show(); } }class InnerClassDemo3 { public static void main(String[] args) { Outer out = new Outer(); Object obj = out.method(); System.out.println(obj); }}*
匿名內部類。就是內部類的簡寫格式。 必須有前提:內部類必須繼承或者實現一個外部類或者介面。 匿名內部類:
其實就是一個匿名子類對象。 格式:new 父類or介面(){子類內容} */
abstract class Demo{ abstract void show();}class Outer{ int num = 4; /* 注釋 class Inner extends Demo { void show() { System.out.println("show ..."+num); } } */ public void method() { //new Inner().show(); new Demo()//匿名內部類。 { void show() { System.out.println("show ........"+num); } }.show(); }}class InnerClassDemo4 { public static void main(String[] args) { new Outer().method(); }}////////////////////////////////////////////////////////////////////////interface Inter{ void show1(); void show2();}class Outer{ /* class Inner implements Inter { public void show1() { } public void show2() { } } */ public void method() {// Inner in = new Inner();// in.show1();// in.show2(); Inter in = new Inter() { public void show1() { } public void show2() { } }; in.show1(); in.show2(); }}/*通常的使用情境之一:當函數參數是介面類型時,而且介面中的方法不超過三個。可以用匿名內部類作為實際參數進行傳遞*/
class InnerClassDemo5 { class Inner { } public static void main(String[] args) { System.out.println("Hello World!"); /* show(new Inter() { public void show1(){} public void show2(){} }); */// new Inner(); } public void method() { new Inner(); } public static void show(Inter in) { in.show1(); in.show2(); }}//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////class Outer{ void method() { Object obj = new Object() { public void show() { System.out.println("show run"); } }; //obj.show(); //error : 因為匿名內部類這個子類對象被向上轉型為了Object類型。 //這樣就不能在使用子類特有的方法了。 new Object() { public void show() { System.out.println("show run"); } }.show(); }}public class FieldDemo { public static void main(String[] args) { new Outer().method(); } }
Java 內部類