內(nèi)部類(lèi)
靜態(tài)內(nèi)部類(lèi)
靜態(tài)內(nèi)部類(lèi)在生成對(duì)象的時(shí)候瞬哼,不需要事先創(chuàng)建外部類(lèi)對(duì)象
Outer.Inner in = new Outer.Inner();
成員內(nèi)部類(lèi)
成員內(nèi)部類(lèi)在生成對(duì)象的時(shí)候溺蕉,需要事先創(chuàng)建外部類(lèi)對(duì)象。
Outer.Inner in = new Outer().new Inner();
成員內(nèi)部類(lèi)在編譯完成之后會(huì)隱含的保存著一個(gè)引用,該引用是指向創(chuàng)建它的外圍類(lèi)蔑舞。
Class Outer{
T xxx;
Class Inner{
func(){
sout(Outer.this.xxx);
}
}
}
方法內(nèi)部類(lèi)
- 無(wú)修飾。
- 除了創(chuàng)建這個(gè)類(lèi)的方法可以訪(fǎng)問(wèn)它以外嘹屯,其他地方均不能訪(fǎng)問(wèn)攻询。
- 不能有靜態(tài)的變量或方法。
- 方法內(nèi)部類(lèi)不可以改變所在方法的形參抚垄,只能使用蜕窿。
匿名內(nèi)部類(lèi) ( 屬于方法內(nèi)部類(lèi) )
匿名內(nèi)部類(lèi)必須繼承一個(gè)抽象類(lèi)或者實(shí)現(xiàn)一個(gè)接口。
interface ITest{
void test();
}
class A{
public static void main(){
ITest itest ;
itest = new ITest(){
public void test(){
System.out.println("A->main方法->匿名內(nèi)部類(lèi)的test函數(shù)");
}
};
itest.test();
}
}