Переопределение метода интерфейса по умолчанию с абстрактным методом

Мне кажется, что это странно, и мне было интересно, если это то, что регулярно используется. Когда это может быть полезно?

public interface InterA { 
 Object getInfo() throws Exception1; 
}
public interface InterB {
 public default Integer getInfo(Object s) {return 67;} 
}
public interface InterC extends InterA, InterB {
 @Override public abstract Integer getInfo(Object s);
}
2 ответа

Конечно, вам разрешено это делать. Само название говорит, что оно abstract. Вам разрешено это делать, когда реализованный класс этого абстрактного класса должен переопределить этот метод.

Когда вы решили быть абстрактным, вам не нужно реализовывать.


Это существует перед методами интерфейса по умолчанию. Например, абстрактный класс может сделать

@Override
 abstract public int hashCode();

принудительные подклассы обеспечивают реализации для hashCode, возможно, из-за дополнительных требований, налагаемых абстрактным классом.

licensed under cc by-sa 3.0 with attribution.