2015-02-06 3 views
0

Приведенный ниже текст является ошибкой как «отсутствует тело метода или объявлен абстрактный» абстрактного класса. Но класс WaterLevelObserver уже абстрактный ... как я могу исправить эту ошибку?Отсутствует метод body abstract class

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

IMHO недостаточно точен: метод, объявленный как не абстрактный, «должен» не иметь тела, он ДОЛЖЕН иметь один! –

+0

@GyroGearless Я согласен - «must» - лучшая формулировка. Исправлена. Благодаря! – Mureinik

3

Любой не-осуществимый способ внутри abstract класса также должны быть abstract,

так что вы должны сделать свой метод abstract и убедитесь, что вы реализуете его в подклассе

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

Читать то, что говорит Oracle.

Смотрите также:

+0

Это неправильно. Такой договор не существует. – xehpuk

+0

Какой контракт? – shikjohari

+0

@xehpuk Любые не реализованные методы внутри класса 'abstract' следует называть абстрактным обрядом? –

0

Либо вы должны определить тело или вы должны объявить его как abstract. Если вы не хотите, чтобы добавить любое тело - изменить

void update(int waterLevel);} 

к

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

Метод должен быть абстрактным также:

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

метод, который не объявлен, как abstract должны быть реализованы по классу, даже если он находится в абстрактном классе.

0

Нам нужно явно указать компилятору, что сво абстрактный класс в случае абстрактного class.without ключевого слова будет поиск для тела. его штраф в случае интерфейса по умолчанию все являются абстрактными.

аннотация void update (int waterLevel);