2015-02-06 99 views
0

抽象類有'錯誤方法體或聲明抽象'錯誤。但類WaterLevelObserver已經是抽象的......我該如何解決這個錯誤?缺少方法體抽象類

abstract class WaterLevelObserver{ 
    void update(int waterLevel); 
} 

class SMSWriter extends WaterLevelObserver{ 
    void update(int waterLevel){ 
     System.out.println("Sending SMS.. : "+waterLevel); 
    } 
} 

class Alarm extends WaterLevelObserver{ 
    void update(int waterLevel){ 
     if(waterLevel>=50){ 
      System.out.println("ON"); 
     }else{ 
      System.out.println("OFF"); 
     } 
    } 
} 

class Display extends WaterLevelObserver{ 
    void update(int waterLevel){ 
     System.out.println("Water level.. : "+waterLevel); 
    } 
} 

回答

1

將類定義爲abstract意味着您不能實例化它,並且允許您定義abstract方法。

任何未定義爲abstract的方法都必須具有主體。 TL; DR - 如果你不想執行update,把它定義爲abstract

abstract class WaterLevelObserver{ 
    abstract void update(int waterLevel); 
} 
+0

恕我直言,不夠精確:一種聲明爲不抽象的方法「應該」沒有身體,它必須有一個! – 2015-02-06 12:29:07

+0

@GroroGearless我同意 - 「必須」是一個更好的措辭。固定。謝謝! – Mureinik 2015-02-06 12:31:44

3

abstract類中任何未實現的方法也應該是abstract

,所以你需要讓你的方法abstract,並確保你實現它在你的子類

abstract class WaterLevelObserver{ 
     abstract void update(int waterLevel); 
    } 

閱讀Oracle說什麼。

另請參見:

+0

這是錯誤的。沒有這樣的合同存在。 – xehpuk 2015-02-06 12:06:41

+0

哪個合約? – shikjohari 2015-02-06 12:07:36

+0

@xehpuk在'abstract'類中的任何未實現的方法都應該被命名爲抽象的rite? – 2015-02-06 12:08:40

0

要麼你必須定義身體或者你有將其聲明爲abstract。如果你不希望添加任何機構 - 改變

​​

`abstract void update(int waterLevel);}` 
0

的方法應該是抽象太:

abstract class WaterLevelObserver 
{ 
    void abstract update(int waterLevel); 
} 

沒有被聲明爲abstract必須實施的方法即使它在抽象類中也是如此。

0

我們需要明確地告訴編譯器,它在抽象的情況下,抽象類class.without關鍵字,它將搜索爲身體。它在接口默認情況下的罰款都是抽象的。

abstract void update(int waterLevel);