Java内部類
如果一個事物内部包含另一個事務,那麼這就是一個類内部包含另一個類
例如:身體和心髒的關系,汽車和發動機的關系
成員内部類
局部内部類(包含匿名内部類)
注意:内用外,随意通路;外用内,需要内部類對象;
間接使用:在外部類的方法中使用内部類,然後在main中調用這個外部類方法
直接使用:
外部類名稱.内部類名稱 對象名 = new 外部類名稱(). new 内部類名稱();
如果出現重名情況,格式:
外部類名稱.this.外部成員變量名
定義一個類的時候,權限修飾符規則如下:
外部類:public / (default)
成員内部類:public / protected / (default) / private
局部内部類:什麼都不寫
局部内部類,如果希望通路所在方法的局部變量,那麼這個局部變量必須是【有效final的】。
new出來的對象在堆(heap)中
局部變量是跟着方法走的,在棧(stack)當中
方法運作結束後,立刻出棧,局部變量立刻消失
但是new出來的對象會在堆(heap)中持續存在,直到垃圾回收消失
如果接口的實作類(或者是父類的子類)隻需使用唯一的一次,那麼這種情況下就可以省略掉該類的定義,而改為使用【匿名内部類】。
對格式“new 接口名稱() {...}”進行解析:
new代表建立對象的動作
接口名稱就是匿名内部類需要實作哪個接口
{...}是匿名内部類的内容
注意事項:
匿名内部類,在【建立對象】的時候,隻能使用唯一一次。如果希望多次建立對象,而且類的内容一樣的話,那麼就必須使用單獨定義的實作類了。
匿名對象,在【調用方法】的時候,隻能調用唯一一次。如果希望同一個對象,調用多次方法,那麼必須給對象起個名字。
匿名内部類是省略了【實作類/子類名稱】,但是匿名對象是省略了【對象名稱】
注意:匿名内部類和匿名對象不是一回事!!!