內(nèi)部類(lèi)就是定義在一個(gè)類(lèi)中的另外一個(gè)類(lèi),是一種從屬關(guān)系。在沒(méi)有實(shí)際了解內(nèi)部類(lèi)之前,我始終困惑,為什么要在一個(gè)類(lèi)中定義另外一個(gè)類(lèi),這不是增加代碼結(jié)構(gòu)復(fù)雜度么?現(xiàn)在才大致能知道這種設(shè)計(jì)的優(yōu)勢(shì)是大于其劣勢(shì)的。比如,我們可以通過(guò)內(nèi)部類(lèi)解決類(lèi)的單繼承問(wèn)題,外部類(lèi)不能再繼承的類(lèi)可以交給內(nèi)部類(lèi)繼承。我們可以通過(guò)定義內(nèi)部類(lèi)來(lái)實(shí)現(xiàn)一個(gè)類(lèi)私屬于一個(gè)類(lèi),實(shí)現(xiàn)更好的封裝性。具體的我們接下來(lái)介紹,本文主要通過(guò)介紹內(nèi)部類(lèi)的四種不同類(lèi)型的定義,實(shí)例的創(chuàng)建,內(nèi)部實(shí)現(xiàn)原理以及使用場(chǎng)景幾種不同角度來(lái)學(xué)習(xí)內(nèi)部類(lèi)。
靜態(tài)內(nèi)部類(lèi)
成員內(nèi)部類(lèi)
方法內(nèi)部類(lèi)
匿名內(nèi)部類(lèi)
一、靜態(tài)內(nèi)部類(lèi)
靜態(tài)內(nèi)部類(lèi)的定義和普通的靜態(tài)變量或者靜態(tài)方法的定義方法是一樣的,使用static關(guān)鍵字,只不過(guò)這次static是修飾在class上的,一般而言,只有靜態(tài)內(nèi)部類(lèi)才允許使用static關(guān)鍵字修飾,普通類(lèi)的定義是不能用static關(guān)鍵字修飾的,這一點(diǎn)需要注意一下。下面定義一個(gè)靜態(tài)內(nèi)部類(lè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è)類(lèi)就是一個(gè)靜態(tài)內(nèi)部類(lèi)。我們說(shuō)