1. 程式人生 > 其它 >匿名類和本地類

匿名類和本地類

技術標籤:java抽象類

匿名類和本地類的理解和使用
首先要了解抽象類的定義,在類中宣告一個方法,這個方法沒有實現體,是一個“空”方法

這樣的方法就叫抽象方法,使用修飾符“abstract"

當一個類有抽象方法的時候,該類必須被宣告為抽象類

package charactor;
 
public abstract class Hero {
    String name;
 
    float hp;
 
    float armor;
 
    int moveSpeed;
 
    public static void main(String[] args) {
 
    }
// 抽象方法attack // Hero的子類會被要求實現attack方法 public abstract void attack(); }

Hero類可以在不提供抽象方法的前提下,宣告為抽象類
一旦一個類被宣告為抽象類,就不能夠被直接例項化

下面來說匿名類
匿名類指的是在宣告一個類的同時例項化它,使程式碼更加簡潔精練
通常情況下,要使用一個介面或者抽象類,都必須建立一個子類

有的時候,為了快速使用,直接例項化一個抽象類,並“當場”實現其抽象方法。
既然實現了抽象方法,那麼就是一個新的類,只是這個類,沒有命名。
這樣的類,叫做匿名類

package charactor;
public abstract class Hero { String name; //姓名 float hp; //血量 float armor; //護甲 int moveSpeed; //移動速度 public abstract void attack(); public static void main(String[] args) { ADHero adh=new ADHero(); //通過列印adh,可以看到adh這個物件屬於ADHero類
adh.attack(); System.out.println(adh); Hero h = new Hero(){ //當場實現attack方法 public void attack() { System.out.println("新的進攻手段"); } }; h.attack(); //通過列印h,可以看到h這個物件屬於Hero$1這麼一個系統自動分配的類名 System.out.println(h); } }

那麼這個時候就有人有疑問,不是說抽象類不能被例項化嗎?但其實是因為在實現抽象方法時,實際已經生成了一個新(匿名)類,就如講解中示例的Hero$1這個類。
換言之,也就不是將抽象類Hero例項化了,實際上例項化的是匿名類Hero$1,這才是匿名的真意。

本地類可以理解為有名字的匿名類

package charactor;
   
public abstract class Hero {
    String name; //姓名
          
    float hp; //血量
          
    float armor; //護甲
          
    int moveSpeed; //移動速度
      
    public abstract void attack();
      
    public static void main(String[] args) {
          
        //與匿名類的區別在於,本地類有了自定義的類名
        class SomeHero extends Hero{
            public void attack() {
                System.out.println( name+ " 新的進攻手段");
            }
        }
         
        SomeHero h  =new SomeHero();
        h.name ="地卜師";
        h.attack();
    }
      
}