靜態內部類
定義在內部的靜態類,有static關鍵字,就是靜態內部類。
public class Outter {
private static int a;
private String b;
public static class Inner{
public void println(){
System.out.println(a);
}
}
}
- 靜態內部類可以訪問外部類所有的靜態變量和方法,即使是 private 的也一樣。
- 靜態內部類和一般類一致,可以定義靜態變量、方法,構造方法等。
- 其它類使用靜態內部類需要使用“外部類.靜態內部類”方式,如下所示:Outter.Inner inner =
new Outter.Inner();inner.print();
成員內部類
定義在類內部的非靜態類,沒有static關鍵字,就是成員內部類。類中不能定義靜態方法與變量。類初始化的時候先初始化靜態成員,如果允許成員內部類定義靜態變量,那麼成員內部類的靜態變量初始化順序是有歧義的。
public class Outter {
private static int a;
private String b;
public class Inner{
public void println(){
System.out.println(a);
System.out.println(b);
}
}
}
局部內部類
定義在方法裏面的類,就是局部類。如下的示例代碼:
public class Outter {
private static int a;
private String b;
public void println(final String name){
class Inner{
public void test(){
System.out.println(a);
System.out.println(b);
System.out.println(name);
}
}
}
}
匿名內部類
匿名內部類我們必須要繼承一個父類或者實現一個接口,當然也僅能只繼承一個父類或者實現一個接口。同時它也是沒有 class 關鍵字,這是因爲匿名內部類是直接使用 new 來生成一個對象的引用。
public abstract class Player {
//運動員名稱
private String mName;
public String getName() {
return mName;
}
public void setName(String name) {
this.mName = name;
}
//可以跑多少米
public abstract int run();
}
public class Test {
public void test(Player player){
System.out.println(player.getName() + "能夠跑" + player.run() + "米");
}
public static void main(String[] args) {
new Test().test(new Player() {
public int run() {
return 10000;
}
public String getName() {
return "博爾特";
}
});
}
}