什么是內(nèi)部類(lèi)??jī)?nèi)部類(lèi)的作用

內(nèi)部類(lèi):把一個(gè)類(lèi)定義到另外一個(gè)類(lèi)的內(nèi)部,在類(lèi)里面的這個(gè)類(lèi)就叫內(nèi)部類(lèi),外面的類(lèi)就叫外部類(lèi)。

作用:

? ? 1.封裝性:隱藏你不想讓別人知道的操作

? ? 2.每個(gè)內(nèi)部類(lèi)都能獨(dú)立的繼承一個(gè)接口的實(shí)現(xiàn),所以無(wú)論外部類(lèi)是否已經(jīng)繼承了某個(gè)(接口的)實(shí)現(xiàn),對(duì)于內(nèi)部類(lèi)都沒(méi)有影響。內(nèi)部類(lèi)使得多繼承的解決方案變得完整,

????3.方便編寫(xiě)事件驅(qū)動(dòng)程序

????4.方便編寫(xiě)線程代碼

? ? 5.在能實(shí)現(xiàn)功能的情況下,為了節(jié)省編譯后產(chǎn)生的字節(jié)碼(內(nèi)部類(lèi)可以減少字節(jié)碼文件,即java文件編譯后的.class文件)


內(nèi)部類(lèi):靜態(tài)內(nèi)部類(lèi),成員內(nèi)部類(lèi),局部?jī)?nèi)部類(lèi),匿名內(nèi)部類(lèi)

1.靜態(tài)內(nèi)部類(lèi)

? ??指被聲明為static的內(nèi)部類(lèi),他可以不依賴(lài)內(nèi)部類(lèi)而實(shí)例,而通常的內(nèi)部類(lèi)需要實(shí)例化外部類(lèi),從而實(shí)例化。靜態(tài)內(nèi)部類(lèi)不可以有與外部類(lèi)有相? ?同的類(lèi)名。不能訪問(wèn)外部類(lèi)的普通成員變量,但是可以訪問(wèn)靜態(tài)成員變量和靜態(tài)方法(包括私有類(lèi)型)

2.成員內(nèi)部類(lèi)

????成員內(nèi)部類(lèi)可以無(wú)條件訪問(wèn)外部類(lèi)的所有成員屬性和成員方法(包括private成員和靜態(tài)成員)。

????當(dāng)成員內(nèi)部類(lèi)擁有和外部類(lèi)同名的成員變量或者方法時(shí),會(huì)發(fā)生隱藏現(xiàn)象,即默認(rèn)情況下訪問(wèn)的是成員內(nèi)部類(lèi)的成員

public class OutClass {???????

?????public void test1() { }???????

?????class InnerClass {????????????

????????//成員內(nèi)部類(lèi)???????????

?????????private String testStrInner = "";?????????

? ? ? ? ?private void testInner() {????????????

????????????????test1();???//成員內(nèi)部類(lèi)可以訪問(wèn)外部類(lèi)所有的屬性和方法。靜態(tài)方法直接訪問(wèn)。????????????

??????????}

? ? }

}

3.局部?jī)?nèi)部類(lèi)

? ??局部?jī)?nèi)部類(lèi)是定義在一個(gè)方法或者一個(gè)作用域里面的類(lèi),它和成員內(nèi)部類(lèi)的區(qū)別在于局部?jī)?nèi)部類(lèi)的訪問(wèn)僅限于方法內(nèi)或者該作用域內(nèi)。

public class Animal {

????public static void bellow() {

????????String bellowStr = "動(dòng)物吼叫";

????????System.out.println(bellowStr);

????????final class Dog {

????????????//局部?jī)?nèi)部類(lèi)

????????????String dogBellowStr = bellowStr + ";狗 :汪汪汪";

????????????public void dogBellow() {

????????????????System.out.println(dogBellowStr);

????????????}

????????}

????}

}

4.匿名內(nèi)部類(lèi)

? ??匿名內(nèi)部類(lèi)就是沒(méi)有名字的內(nèi)部類(lèi)

//父類(lèi) Animal

public class Animal {

????public void bellow() {

????????//動(dòng)物吼叫的類(lèi)型

????????System.out.println("動(dòng)物吼叫");

????}

}


class Demo {

????public static void main(String[] args) {

????Demo demo = new Demo();

????demo.getDogBellow(new Animal(){

????????????//匿名內(nèi)部類(lèi),重寫(xiě)父類(lèi)方法。當(dāng)然接口也是一樣

????????????@Override

????????????public void bellow() {

????????????System.out.println("狗 汪汪汪。。。。");

????????????}

????});

}

public void getDogBellow(Animal animal){

????animal.bellow();

????}

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容