Подкласс не является абстрактным и не переопределяет метод в суперклассе при добавлении второго метода - PullRequest
0 голосов
/ 24 сентября 2018

При добавлении второго метода к подклассу он выдает вышеуказанную ошибку.

package roar;

public class Roar {
    public static void main(String[] args) {
        Animal a[] = new Animal[1];
        a[0] = new Cat();
        System.out.println(a[0].roar());
    }
}

class Cat implements Animal{ 
    public boolean roar(){
        return true;
    }
}

interface Animal{
    public boolean roar();
    //   public boolean gender();  <-- this method
}

1 Ответ

0 голосов
/ 24 сентября 2018

Ошибка говорит вам все.Реализация интерфейса означает, что вы держите свой класс в соответствии с контрактом интерфейса.Интерфейс гарантирует: Каждый неабстрактный класс, который реализует меня, обеспечивает реализацию для всех абстрактных методов, которые я объявляю.Это может быть связано с тем, что они его содержат, или путем наследования от родительского класса.

interface Animal{
public boolean roar();
 //   public boolean gender();  <-- this method
}

Если вы добавите этот второй метод, вам также потребуется предоставить реализацию:

class Cat implements Animal{ 
public boolean roar(){
    return true;
}
public boolean gender() {
    return true;
}
}

Это решит вашу проблему.Но иметь boolean для 'roar' или 'gender' кажется довольно странным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...