Java的內部類(無靜態內部類)
阿新 • • 發佈:2018-11-12
package tgjavaday5; import org.omg.CORBA.PUBLIC_MEMBER; /** * * @author asus Tiger * 對四大內部類的實現 */ //成員內部類 interface inter1{ void interFun(); void interFun2(String str); } class Out1 { private int id=0; private String name=null; private int age=0; public Out1(int id,String name,int age){ this.id=id; this.name=name; this.age=age; } //成員內部類Inner1 //成員內部類可以呼叫外部類的所有資料…… class Inner1 { int atest=10; public void innerFun1(){ System.out.println("我是成員類中的函式"); } public void innerFun2 (String str){ String string=str.toLowerCase(); System.out.println(string); } public void innerFun3(){ String string2=name.toString(); System.out.println("name.tostring()的值為:"+string2); } } /*區域性內部類Inner2:在方法中定義一個類,該類只屬於該方法,不屬於外部類! * 區域性內部類Inner2不能用訪問修飾符,它只限定於該方法中使用 * 區域性內部類只能訪問該方法的final資料型別 */ public void innerFun3( final int []a){ class Inner2{ //陣列排序 private int [] b=a; void swap(int []b){ for(int i=0;i<b.length;++i){ for(int j=i+1;j<b.length;++j){ if(b[i]>b[j]){int temp=b[i];b[i]=b[j];b[j]=temp;} } } } void print(int []b){ for(int x :b){ System.out.print(x+" "); } } /*驗證區域性內部類是否可以訪問外部類的資料型別 * !int btest=atest; * 區域性內部類只能訪問該方法的final資料型別,不能訪問外部類的資料型別 */ } Inner2 aInner2=new Inner2(); aInner2.swap(a); aInner2.print(a); } /*匿名內部類:匿名內部類也是區域性內部類,無建構函式, * 它的成員初始化只能靠構造程式碼塊。 */ public Inner1 innerFun4(int id,String name,int age){ return new Inner1(){ int id; String name; int age; public void setout1(int id,String name,int age){ this.id=id; this.name=name; this.age=age; } public void getId(){ System.out.println(id); } }; } } public class Second { public static void main(String []args){ Out1 out1=new Out1(01,"tim",10); int []a={2,4,5,9,2,4,7,9,6,15,4,24,57,41,89,11}; //呼叫成員內部類的方法 Out1.Inner1 inner1=out1.new Inner1(); inner1.innerFun1(); inner1.innerFun2("wdweWDQWDQ..';.';DQWDWQDswd"); inner1.innerFun3(); //呼叫區域性內部類的方法 out1.innerFun3(a); //呼叫匿名內部類的方法 } }