1、語法格式
【修飾符】 class 外部類 【extends 外部類的父類】【implements 外部類的父接口們】 {
【修飾符】 返回值類型 方法名(【形參列表】){
【其他修飾符】 class 局部內部類名 【extends 內部類的父類】【implements 內部類的父接口們】{
【修飾符】 返回值類型 方法名(【形參列表】){
【其他修飾符】 class 局部內部類名 【extends 內部類的父類】【implements 內部類的父接口們】{
}
}
}
}
}
public class Outer{ public void method(){ class Inner{ } } }
2、特點
(1)局部內部類也是類,
A:也有自己的字節碼文件:外部類名$編號局部內部類名.class
B:它可以繼承自己的父類,實現自己的父接口們
C:它可以有自己的各種成員:屬性、方法、構造器、代碼塊、內部類
注意:不能有靜態成員
(2)局部內部類可以使用外部類的成員
至於是否可以使用外部類的非靜態的成員,要看局部內部類所在的方法是否是靜態的,如果是靜態的就不能用,其他的可以。
(3)在外部類中使用局部內部類,要看作用域
(4)在外部類的外面不能直接使用局部內部類,但是我們可以得到局部內部類的對象
如何在外部類的外面獲取局部內部類的對象?
interface MyInter{ } public class Outer{ public Object method(){ class Inner{ } return new Inner(); } public MyInter test(){ class Inner implements MyInter{ } return new Inner(); } } Outer out = new Outer(); Object in = out.method(); MyInter in2 = out.test();
(5)局部內部類都可以有什么修飾符
D:abstract
(6)在局部內部類中可以使用外部類的局部變量,但是這個局部變量必須加final
因為局部內部類的對象可以被返回到外部類的外面進行使用,如果不是final的,這個局部變量在方法結束后就消失了,那么再通過局部內部類的對象使用這個變量就有問題了。