Любознательная вещь случается в Java, когда вы используете абстрактный класс для реализации интерфейса: некоторые из методов интерфейса могут быть полностью отсутствуют (т. Е. Не существует абстрактного объявления или реальной реализации), но компилятор не жалуется.Почему абстрактный класс, реализующий интерфейс, может пропустить объявление/реализацию одного из методов интерфейса?
Например, если интерфейс:
public interface IAnything {
void m1();
void m2();
void m3();
}
следующий абстрактный класс получает Весело скомпилирован без предупреждения или ошибки:
public abstract class AbstractThing implements IAnything {
public void m1() {}
public void m3() {}
}
Можете ли вы объяснить, почему?
Нельзя создать объект абстрактного класса. Итак, пока реализация не предусмотрена для абстрактного класса, объекты не могут быть созданы для IAnything. Так что это совершенно нормально для компилятора. Компилятор ожидает, что любой не абстрактный класс, который реализует IAnything, должен реализовать все методы, объявленные из IAnything. И так как нужно расширить и реализовать AbstractThing, чтобы иметь возможность создавать объекты, компилятор будет вызывать ошибку, если эта реализация не реализует методы IAnything, оставленные AbstractThing. – VanagaS 2017-03-19 06:25:36
МОЖЕТ ЛИ МЫ ПРИЗЫВАТЬ, что «шаблон дизайна адаптера»? если мы сохранили m1, m2, m3 пустое тело в абстрактном классе. , тогда MyMainClass расширяет этот абстрактный класс, и я бы мог переопределить любой метод, который я хочу, Никакое принуждение не отменять все методы. Пожалуйста, советую! – 2018-01-06 20:04:18