В задаче у нас есть интерфейс Swimmable с методом void swim().
В абстракном классе OceanAnimal реализован метод public void swim().
Каким образом я могу унаследовавшись от OceanAnimal и реализуя интерфейс Swimmable не реализовывать метод void swim() в своём классе?
Типо так:
public Orca extends OceanAnimal implements Swimmable {}.
Ведь интерфейс Swimmable и класс OceanAnimal никак не связаны.
Denis Ognevsky
17 уровень
Реализация интерфейсный методов в абстрактном классе
Архивный
Комментарии (4)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Ksenia Volkova Java Developer в DXC Master
27 мая 2021, 10:25
Если OceanAnimal не является реализацией Swimmable, то да, эти методы - swim из Swimmable и swim из OceanAnimal - никак не связаны.
0
Denis Ognevsky
28 мая 2021, 03:37
Да, но компилятор пропускает такую конструкцию, как будто метод абстрактного класса реалзизует метод интерфейса
public interface Swimmable {
void swim();
}
public abstract class OceanAnimal {
public void swim() {
//do something
}
}
public class Orca extends OceanAnimal implements Swimmable {
}
Вот такой код компиляцию проходит и запускается, хотя я не реализую в классе Orca метож swim().
Idea подсказывает: "Implements method in Swimmable via subclass Orca", но за счет чего такое возможно?
0
Wladyslaw Java Developer Master
28 мая 2021, 05:27
Inherited instance methods from classes can override abstract interface methods. Consider the following interfaces and classes:
документации.
Унаследованный метод с такой же сигнатурой есть? Есть. Вот он и считается реализацией интерфейса. Другое вопрос в том что класс, от которого этот метод унаследован сам интерфейс не реализует, а значит не обязан реализовывать этот метод. Соответственно, если кто-то поменяет предка, удалив этот метод - предок скомпилируется, а потомок - уже нет. Потому идея и подсказывает что возможны проблемы, полагаю.
The method Mustang.identifyMyself returns the string I am a horse. The class Mustang inherits the method identifyMyself from the class Horse, which overrides the abstract method of the same name in the interface Mammal.
Все работает согласно +2
Denis Ognevsky
28 мая 2021, 07:33
Спасибо, очень подробно.
0