各種內部類的總結
阿新 • • 發佈:2017-07-17
trac 私有化 成員訪問 註意 log 創建 sof args size
面向對象程序設計中,可以在一個類的內部定義另一個類,這個類叫做內部類。內部類分為3種,成員內部類,局部內部類和匿名內部類。
成員內部類
1.成員內部類位於一個類內部的成員位置,可以訪問外部類中私有化的變量,方法等。
2.成員內部類可以被私有化或者靜態,靜態內部類只能訪問外部類中靜態的成員。私有化封裝的內部類只能通過外部類的成員訪問。具體知識點用代碼演示。
package 面向對象; //成員內部類。 class Person { int a=6; class Hand { int a=5; public void test_1() {int a=4; System.out.println(Person.this.a);//外部類變量用類名.this修飾。 System.out.println(this.a);//內部類變量用this修飾。 System.out.println(a);//內部類的方法內的變量不用修飾。 } } } public class Test_5 { public static void main(String[] args) { Person.Hand c= new Person(). newHand();//註意直接創建內部類對象的格式。 //如果內部類為靜態則創建方式為:Person.Hand c=new Person. Hand(); c.test_1(); } }
局部內部類
局部內部類一般位於外部類的成員方法中。局部內部類不能私有化和靜態化。具體知識點如下:
package 面向對象; //局部內部類。 class Outer { private int a=5; public void run() { class Inner//局部內部類不能用static,private修飾。 {//final int c=30 //局部內部類使用局部變量必須加final。(jdk8以前) public void run_1(final int c) { System.out.println(Outer.this.a); System.out.println(c); } } Inner i=new Inner();//局部內部類完成後需要創建對象。 i.run_1(30); } } public class InnerTest { public static void main(String[] args) { Outer o=new Outer(); o.run(); } }
匿名內部類
使用匿名內部類我們必須要繼承一個父類或者實現一個接口,當然也僅能只繼承一個父類或者實現一個接口。同時它也是沒有class關鍵字,這是因為匿名內部類是直接使用new來生成一個對象的引用。
具體知識點如下
package 面向對象; interface Inter { public abstract void method(); } class Test_6 { public static Inter function() { return new Inter()//這裏的內部類實現了inter接口,重寫了method方法。 { public void method() { System.out.println("haha"); } }; } } public class InnerClassTest { public static void main(String[] args) { Test_6.function().method(); } }
各種內部類的總結