部門網(wǎng)站建設(shè)個人總結(jié)網(wǎng)站客服
內(nèi)部類
-
內(nèi)部類就是在一個類中定義一個類,(在A類中定義一個B類,B類就被稱為內(nèi)部類)
格式:public class 類名{ 修飾符 class 類名{} } 如:public class Outer{ public class Inner {} }
//內(nèi)部類可以訪問外部類的成員,包括私有。 //外部類要訪問內(nèi)部類的成員,必須創(chuàng)建對象。
public class Outer{private int num = 10;public class Inner{public void show(){System.out.pirntln(num);//內(nèi)部類可以直接訪問外部類的成員,包括私有}}public void method(){Inner i = new Inner();//外部類想要訪問內(nèi)部類需要創(chuàng)建對象i.show();} }
-
按照內(nèi)部類在類中定義的位置不同,可以分為兩種:在類的成員位置被稱為成員內(nèi)部類;在類的局部位置(方法位置)被稱為局部內(nèi)部類。
//成員內(nèi)部類創(chuàng)建對象格式:外部類名 . 內(nèi)部類名 對象名 = 外部類對象 . 內(nèi)部類對象;(Outer.Inner oi = new Outer().new Inner();)
public class Outer{private int num = 10;private class Inner{public void show(){System.out.println(num);}}public void method(){Inner i = new Inner();//在method的方法中創(chuàng)建Inner內(nèi)部類的對象并調(diào)用方法i.show();} } ? //測試類 public class InnerDemo{public static void main(String[] args){Outer o = new Outer();//在測試方法中創(chuàng)建外部類對象o.method(); ? ? ? ? //外部類對象調(diào)用method方法間接調(diào)用內(nèi)部類對象和方法} }
//局部內(nèi)部類是在方法中定義的類,所以外界無法直接使用,需要在方法內(nèi)部創(chuàng)建對象并使用該類可以直接訪問外部類成員,也可以訪問方法內(nèi)的局部變量。
public class Outer {private int num = 10;public void method(){int num2 = 20;//在方法中定義一個成員變量class Inner{public void show(){System.out.println(num);System.out.println(num2);}}Inner i = new Inner();//在方法中定義對象并調(diào)用i.show();} } ? //測試類 public class OuterDemo{public static void main(String[] args){Outer o = new Outer();//定義外部類對象o.method();//外部類對象調(diào)用方法,間間訪問到局部內(nèi)部類的對象i調(diào)用的show方法} }
-
匿名內(nèi)部類(局部內(nèi)部類的一種)
匿名內(nèi)部類本質(zhì)是一個繼承了該類或者實現(xiàn)了該類接口的子類匿名對象。
格式:new 類名或者接口名(){ 重寫方法; }; 如:new Inter(){ public void show(){} }; //最后分號不要缺少
//定義一個接口 public interface Inter {void show(); } ? //在外部類中寫局部內(nèi)部類,然后寫匿名內(nèi)部類 public class Outer{public void method(){new Inter(){@Overridepublic void show(){System.out.println("匿名內(nèi)部類");}};//現(xiàn)在本質(zhì)是一個對象new Inter(){@Overridepublic void show(){System.out.println("匿名內(nèi)部類");}}.show();//匿名內(nèi)部類對象調(diào)用show方法,可以多次調(diào)用//因為定義的是個接口的實現(xiàn)類對象Inter i = new Inter(){@Overridepublic void show(){System.out.println("匿名內(nèi)部類");}};i.show();} } ? //定義一個測試類 public class OuterDemo{public static void main(String[] args){Outer o = new Outer();o.method();} }
//創(chuàng)建跳高接口 public interface Jumpping{void jump(); } ? //接口的操作類,里面有一個方法方法的參數(shù)是接口名 public class JumppingOperator{public void method(Jumpping j){j.jump();} } ? //測試類 public class JumppingDemo{public static void main(String[] args){//需求:創(chuàng)建接口操作類的對象,調(diào)用method方法JumppingOperator jo = new Jumpping Operator();Jumpping j = new Cat();//需要先創(chuàng)建實現(xiàn)類,然后在測試類中創(chuàng)建實現(xiàn)類對象jo.method(j);//調(diào)的是接口名,因為接口不能直接引用,因此需要定義一個實現(xiàn)類對象//如果不想創(chuàng)建實現(xiàn)類再定義對象,可以使用匿名內(nèi)部類(本質(zhì)是一個對象)jo.method(new Jumpping(){@Overridepublic void jump(){System.out.println("貓可以跳高了"); ? }});} }