內部類
定義:在一個類的內部又定義了一個類,這個類就是內部類。
特點:
①內部類可以訪問其所在類的屬性(包括所在類的私有屬性),內部類創建自身對象需要先創建其所在類的對象;
②可以定義內部接口,且可以定義另外一個內部類實現這個內部接口
③可以在方法體內定義一個內部類,方法體內的內部類可以完成一個基於虛方法形式的回調操作
④內部類不能定義static元素
⑤內部類可以多嵌套
public class Coder {
public int num=1;
public void Paint()
{
System.out.println("Paint");
}
public class InnerClass{
public void method()
{
Paint();
System.out.println("hello"+num);
}
}
public static void main(String [] args){
Coder.InnerClass innerClass=new Coder().new InnerClass();
innerClass.method();
}
}
靜態內部類
位置:定義在成員位置上,使用static修飾。
特點:
①靜態內部類如果要訪問外部的成員變量或成員方法,那麼必須是靜態的;
②會生成兩個.class文件,一個是外部類Outer.class,另一個是Outer$Inner.class
public class Coder {
public static int num=1;
public static void Paint()
{
System.out.println("Paint");
}
public static class InnerClass{
public void method()
{
Paint();
System.out.println("hello"+num);
}
}
public static void main(String [] args){
Coder.InnerClass innerClass=new Coder.InnerClass();
innerClass.method();
}
}
局部內部類
位置:在一個類的成員方法中
特點:①不能使用任何的訪問修飾符
②會生成兩個.class文件,一個是Outer.class,一個是IOuter$LocalInner.class
③局部內部類智能訪問方法中聲明的final類型的變量
匿名內部類
定義:一個繼承了該類或者實現了該接口的子類匿名對象
public class Coder {
public void method(){
new Inner(){
public void info(){
System.out.println("hello");
}
}.info();
}
public static void main(String [] args){
Coder coder=new Coder();
coder.method();
}
}
interface Inner{
public void info();
}