標籤:java 內部類
內部類
內部類不用建立對象就可以訪問外部類的成員變數和函數,包括私人
外部類要訪問內部類,必須建立內部類對象
內部類可以私人
當內部類中定義了靜態成員,則內部類也應該是靜態
當外部類中的靜態方法訪問內部類時,內部類也應該是靜態
//main(){
// 在外部類中執行個體化內部類
//Inner in =new Inner();
// in.i();
//}
局部內部類 內部類定義在局部時,不可以被成員修飾符修飾,可以直接存取外部類中的成員,不能訪問所在局部中的變數,只能訪問被final修飾的局部變數class Outer{ int i=10;public void m(){ syso("-------------"); }public void f(){ class Inner{ int j=10; public void t(){ syso(" "+i+" "+j); } } Inner in=new Inner(); in.t(); }main(){ Outer out =new Outer(); out.f();}}//10 10 靜態內部類靜態內部類調用變數 可以使用內部類的變數 可以使用外部類中靜態變數class Outer{ int i=10; public void f(){syso("f()...");} static class Inner{ int i=20; public void i(){syso(i+" "+this.i+" "+Outer.i);} } }public class kk{ main(){ Outer.Inner in=new Outer.Inner(); in.i(); } }//20 20 10 成員內部類 作為類成員存在於類內部,可以訪問外部類所有成員方法 建立在非所屬類中時,需要先建立外部類,Outer.Inner in=new Outer().new Inner(); 內部類訪問外部類成員變數 Outer.this.x class Outer{ int i=10; class Inner{ int i=20; public void v(){syso(i+" "+this.i+" "+Outer.this.i);} } }public class kk{
// Outer out =new Outer();
// Outer.Inner in =out.new Inner();
// in.v()
Outer.Inner in=new Outer().new Inner();
in.v();
}//20 20 10
匿名內部類
內部類必須是繼承一個類或者實現介面。匿名內部類是一個匿名子類對象,而且這個對象是以一個類的形式展現的。
interface Email{
public void Send();
}
public class kk{
//介面不能執行個體化對象,匿名內部類實現了介面,系統執行個體化匿名內部類對象傳給email
Email email=new Email(){
public void Send(){
syso("send email");
}
};
email.Send();
}//send email
java 內部類