內(nèi)部類就是定義在一個(gè)類中的另外一個(gè)類,是一種從屬關(guān)系。在沒有實(shí)際了解內(nèi)部類之前,我始終困惑,為什么要在一個(gè)類中定義另外一個(gè)類,這不是增加代碼結(jié)構(gòu)復(fù)雜度么?現(xiàn)在才大致能知道這種設(shè)計(jì)的優(yōu)勢(shì)是大于其劣勢(shì)的。比如,我們可以通過內(nèi)部類解決類的單繼承問題,外部類不能再繼承的類可以交給內(nèi)部類繼承。我們可以通過定義內(nèi)部類來實(shí)現(xiàn)一個(gè)類私屬于一個(gè)類,實(shí)現(xiàn)更好的封裝性。具體的我們接下來介紹,本文主要通過介紹內(nèi)部類的四種不同類型的定義,實(shí)例的創(chuàng)建,內(nèi)部實(shí)現(xiàn)原理以及使用場(chǎng)景幾種不同角度來學(xué)習(xí)內(nèi)部類。

  • 靜態(tài)內(nèi)部類

  • 成員內(nèi)部類

  • 方法內(nèi)部類

  • 匿名內(nèi)部類

一、靜態(tài)內(nèi)部類
     靜態(tài)內(nèi)部類的定義和普通的靜態(tài)變量或者靜態(tài)方法的定義方法是一樣的,使用static關(guān)鍵字,只不過這次static是修飾在class上的,一般而言,只有靜態(tài)內(nèi)部類才允許使用static關(guān)鍵字修飾,普通類的定義是不能用static關(guān)鍵字修飾的,這一點(diǎn)需要注意一下。下面定義一個(gè)靜態(tài)內(nèi)部類:

public class Out {    private static String name;    private int age;    public static class In{        private int age;        public void sayHello(){
            
            System.out.println("my name is : "+name);            //--編譯報(bào)錯(cuò)---
            //System.out.println("my age is :"+ age);
        }
    }
}

在上述代碼中,In這個(gè)類就是一個(gè)靜態(tài)內(nèi)部類。我們說