JAVA- 內部類及匿名內部類


普通類,我們平時見到的那種類,就是一個后綴為.java的文件中,直接定義的類,比如

 

public Cat{
  private String name;
  private int age;
}

 

內部類,

內部類。顧名思義,就是包含在外部類中的類,就叫內部類。內部類有兩種,一種是靜態內部類,一種是非靜態內部類。

靜態內部類和非靜態內部類的區別主要如下:

1、內部原理的區別:

靜態內部類是屬於外部類的成員, 是一種靜態的成員,是屬於類的,就有點類似於private static Singleton instance = null; 

非靜態內部類,是屬於外部類的實例對象的一個實例成員,也就是說,每個非靜態內部類, 不是屬於外部類的,是屬於外部類的第一個實例的,創建非靜態內部類的實例以后,非靜態內部類實例,是必須跟一個外部類的實例進行關聯和有寄存關系的。

 

2、創建方式的區別

 靜態內部類

public class School {
    private static School instance = null;
    static class Teacher{}
}

創建靜態內部類的時候,只要直接使用"外部類.內部類()"的方式,就可以,比如new School.Teacher();

非靜態內部類

public class School {
    private String name;
    class Teacher{}
}

創建非靜態內部類的時候,必須要先創建一個外部類的實例,然后通過外部類的實例,再來創建內部類的實例,new School().Teacher()

通常來說,我們一般都會為了方便,會選擇使用靜態內部類。

 

 

匿名內部類

接口只有方法,沒有方法實現

public interface ISayHello {
    String sayhello(String name);
}

接口實現類在另一個類的內部,甚至在一個方法里面。匿名內部類一定式繼承某一個類或者實現接口,必須去實現抽象類的方法或者接口的方法。

匿名內部類的使用場景,通常來說,就是在一個內部類,只要創建一次,使用一次,以后就不再使用的情況下,就可以。那么,此時,通常不會選擇在外部創建一個類,而是選擇直接創建一個實現了某個接口、或者繼承了某個父類的內部類,而且通常是在方法內部,創建一個匿名內部類。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM