java中的匿名內部類總結

匿名內部類也就是沒有名字的內部類java

正由於沒有名字,因此匿名內部類只能使用一次,它一般用來簡化代碼編寫多線程

但使用匿名內部類還有個前提條件:必須繼承一個父類或實現一個接口spa

 

實例1:不使用匿名內部類來實現抽象方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
abstract  class  Person {
     public  abstract  void  eat();
}
 
class  Child  extends  Person {
     public  void  eat() {
         System.out.println( "eat something" );
     }
}
 
public  class  Demo {
     public  static  void  main(String[] args) {
         Person p =  new  Child();
         p.eat();
     }
}

運行結果:eat something線程

能夠看到,咱們用Child繼承了Person類,而後實現了Child的一個實例,將其向上轉型爲Person類的引用code

可是,若是此處的Child類只使用一次,那麼將其編寫爲獨立的一個類豈不是很麻煩?blog

這個時候就引入了匿名內部類繼承

 

實例2:匿名內部類的基本實現

1
2
3
4
5
6
7
8
9
10
11
12
13
14
abstract  class  Person {
     public  abstract  void  eat();
}
 
public  class  Demo {
     public  static  void  main(String[] args) {
         Person p =  new  Person() {
             public  void  eat() {
                 System.out.println( "eat something" );
             }
         };
         p.eat();
     }
}

運行結果:eat something接口

能夠看到,咱們直接將抽象類Person中的方法在大括號中實現了ci

這樣即可以省略一個類的書寫string

而且,匿名內部類還能用於接口上

 

實例3:在接口上使用匿名內部類

interface  Person {
     public  void  eat();
}
 
public  class  Demo {
     public  static  void  main(String[] args) {
         Person p = new  Person() {
             public  void  eat() {
                 System.out.println( "eat something" );
             }
         };
         p.eat();
     }
}

運行結果:eat something

 

由上面的例子能夠看出,只要一個類是抽象的或是一個接口,那麼其子類中的方法均可以使用匿名內部類來實現

最經常使用的狀況就是在多線程的實現上,由於要實現多線程必須繼承Thread類或是繼承Runnable接口

 

實例4:Thread類的匿名內部類實現

public  class  Demo {
     public  static  void  main(String[] args) {
         Thread t = new  Thread() {
             public  void  run() {
                 for  ( int  i = 1 ; i <= 5 ; i++) {
                     System.out.print(i + " " );
                 }
             }
         };
         t.start();
     }
}

運行結果:1 2 3 4 5

 

實例5:Runnable接口的匿名內部類實現

1
2
3
4
5
6
7
8
9
10
11
12
13
public  class  Demo {
     public  static  void  main(String[] args) {
         Runnable r =  new  Runnable() {
             public  void  run() {
                 for  ( int  i =  1 ; i <=  5 ; i++) {
                     System.out.print(i +  " " );
                 }
             }
         };
         Thread t =  new  Thread(r);
         t.start();
     }
}

運行結果:1 2 3 4 5

相關文章
相關標籤/搜索