В производственном коде я часто видеть классы, определенные следующим образом:Почему разделение интерфейса и реализация?
public interface SomeComponent { // Some methods }
public class SomeComponentImpl implements SomeComponent { // Some methods}
public interface SomeComponentV2 extends SomeComponent { // Some methods }
public class SomeComponentV2Impl extends SomeComponentImpl implements SomeComponent { // Some methods }
Почему в этом случае мы хотим, чтобы отделить интерфейс и его реализацию?
Или это следующим образом, почему это плохо, чтобы просто иметь один базовый класс, и пусть V2 продлить/переопределения V1 следующим образом:
public class SomeComponent { // Some methods }
public class SomeComponentV2 extends SomeComponent
{
// Override methods for reimplementation
// Add new methods for new features.
}
Вы, кажется, не используете интерфейс 'SomeComponentV2' в любом месте. Это намеренно? Кроме того, интерфейсы и классы пустые? Последнее, но не менее важное: спрашиваете, зачем использовать интерфейсы, когда вы можете просто использовать классы? – CKing
Иногда существуют так называемые «маркерные» интерфейсы, которые не имеют тела, а просто идентифицируют объект как принадлежащий к определенной категории. Пример Serializable. – swingMan
См. Мое обновление. Все классы/интерфейсы имеют контент. Они не являются пустыми маркерами, но в них есть реальный код. Я видел такой дизайн во многих исходных кодах производственных систем, поэтому интересно, почему. – OneZero