當我們實現一個抽象方法時。傳統的做法就是創建一個子類去繼承抽象類或者實現接口 然後實現裏面的抽象方法 ,而匿名內部類大大簡化了着一個步驟!
關於匿名內部類:
傳統做法 :如過定義了一個接口A1 我們知道接口A1裏面的方法是抽象的,那麼實現A1的傳統的方法就是
找一個B類去實現這個A1接口裏面的抽象方法!看代碼
public class NoInnerClassDemo2 {
public static void main(String[] args) {
new X1().fun1();//實例化X類對象並調用fun1()方法
}
}
interface A1{ //定義接口A1
public void printlnfo(); //定義一個接口的抽象方法
}
class B implements A{ //讓B 去實現接口A1的抽象方法
public void printlnfo(){
System.out.prinltn("Hello World");
}
}
class X1{//定義X1類
public void fun1(){ //定義fun1()方法
this.fun2(new B());
}
public void fun2(A1 a){ //接受接口的實例
a.printlnfo(); //調用接口方法
}
}
//假如這個接口的實現類B類只是用了一次 那麼我們就沒必要再單獨用了,這個時候就要用到匿名內部類來完成了,看下面的代碼
public class NoInnerClassDemo2 {
public static void main(String[] args) {
new X1().fun1();//實例化X1類對象並調用fun1()方法
/* X x = new X();
x.fun1();*/
}
}
interface A1{ //定義接口A1
public void printlnfo(); //定義一個接口的抽象方法
}
class X1{ //定義X類
public void fun1(){ //定義fun1()方法
this.fun2(new A1(){ //匿名內部類
public void printlnfo(){ //實現接口中的抽象方法
System.out.println("匿名的實現方法啊");
}
});
}
public void fun2(A1 a){//接受接口的實例
a.printlnfo();//調用接口方法
}
}
//總結: 匿名內部類 其實比你用單獨一個類 去實現接口 或 繼承抽象類 裏面的抽象方法方便很多!還要注意 這裏面綜合了 什麼是實例化?
就是你需要用到哪個類就new那個類,然後用new出來的 對象名.方法名()來調用裏面的方法! 而且本題中用的實例化呢
是根據匿名對象調用的 如主類中 new X1().fun1();//實例化X1類對象並調用fun1()方法(根據匿名對象直接調用方法)