內(nèi)部類:把一個類定義到另外一個類的內(nèi)部上荡,在類里面的這個類就叫內(nèi)部類哎壳,外面的類就叫外部類毅待。
作用:
? ? 1.封裝性:隱藏你不想讓別人知道的操作
? ? 2.每個內(nèi)部類都能獨(dú)立的繼承一個接口的實現(xiàn),所以無論外部類是否已經(jīng)繼承了某個(接口的)實現(xiàn)归榕,對于內(nèi)部類都沒有影響。內(nèi)部類使得多繼承的解決方案變得完整吱涉,
????3.方便編寫事件驅(qū)動程序
????4.方便編寫線程代碼
? ? 5.在能實現(xiàn)功能的情況下,為了節(jié)省編譯后產(chǎn)生的字節(jié)碼(內(nèi)部類可以減少字節(jié)碼文件,即java文件編譯后的.class文件)
內(nèi)部類:靜態(tài)內(nèi)部類怎爵,成員內(nèi)部類特石,局部內(nèi)部類,匿名內(nèi)部類
1.靜態(tài)內(nèi)部類
? ??指被聲明為static的內(nèi)部類逞敷,他可以不依賴內(nèi)部類而實例,而通常的內(nèi)部類需要實例化外部類,從而實例化缴川。靜態(tài)內(nèi)部類不可以有與外部類有相? ?同的類名。不能訪問外部類的普通成員變量描馅,但是可以訪問靜態(tài)成員變量和靜態(tài)方法(包括私有類型)
2.成員內(nèi)部類
????成員內(nèi)部類可以無條件訪問外部類的所有成員屬性和成員方法(包括private成員和靜態(tài)成員)把夸。
????當(dāng)成員內(nèi)部類擁有和外部類同名的成員變量或者方法時,會發(fā)生隱藏現(xiàn)象铭污,即默認(rèn)情況下訪問的是成員內(nèi)部類的成員
public class OutClass {???????
?????public void test1() { }???????
?????class InnerClass {????????????
????????//成員內(nèi)部類???????????
?????????private String testStrInner = "";?????????
? ? ? ? ?private void testInner() {????????????
????????????????test1();???//成員內(nèi)部類可以訪問外部類所有的屬性和方法恋日。靜態(tài)方法直接訪問。????????????
??????????}
? ? }
}
3.局部內(nèi)部類
? ??局部內(nèi)部類是定義在一個方法或者一個作用域里面的類嘹狞,它和成員內(nèi)部類的區(qū)別在于局部內(nèi)部類的訪問僅限于方法內(nèi)或者該作用域內(nèi)岂膳。
public class Animal {
????public static void bellow() {
????????String bellowStr = "動物吼叫";
????????System.out.println(bellowStr);
????????final class Dog {
????????????//局部內(nèi)部類
????????????String dogBellowStr = bellowStr + ";狗 :汪汪汪";
????????????public void dogBellow() {
????????????????System.out.println(dogBellowStr);
????????????}
????????}
????}
}
4.匿名內(nèi)部類
? ??匿名內(nèi)部類就是沒有名字的內(nèi)部類
//父類 Animal
public class Animal {
????public void bellow() {
????????//動物吼叫的類型
????????System.out.println("動物吼叫");
????}
}
class Demo {
????public static void main(String[] args) {
????Demo demo = new Demo();
????demo.getDogBellow(new Animal(){
????????????//匿名內(nèi)部類磅网,重寫父類方法谈截。當(dāng)然接口也是一樣
????????????@Override
????????????public void bellow() {
????????????System.out.println("狗 汪汪汪。涧偷。簸喂。。");
????????????}
????});
}
public void getDogBellow(Animal animal){
????animal.bellow();
????}
}