內部類
內部類不用建立對象就可以訪問外部類的成員變量和函數,包括私有
外部類要訪問內部類,必須建立內部類對象
內部類可以私有
當內部類中定義了靜態成員,則內部類也應該是靜態的
當外部類中的靜態方法訪問內部類時,內部類也應該是靜態的
//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