Я предполагаю, что вы играете с Java, в которой есть некоторые правила наследования.
Реализация интерфейсов является распространенным и часто используемым вариантом. Так, например, если у вас есть класс источника данных, который взаимодействует с СУБД, а не наследует этот класс и использует его для реализации источника данных NoSQL, оба могут реализовать один и тот же интерфейс.
Вместо ..
public class RDBMSDataSource {
...
public String loadSomeDataFromDataSource() {
...Do some stuff...
}
}
public class NoSQLDataSource extends RDBMSDataSource {
...
@Override
public String loadSomeDataFromDataSource() {
...Do some other stuff...
}
}
public class DataSourceClient {
public void foo() {
RDBMSDataSource ds = new NoSQLDataSource();
ds.loadSomeDataFromDataSource();
}
}
Что работает, но трудно читать, вы можете использовать это ...
public interface DataSource {
public String loadSomeDataFromDataSource();
}
public class RDBMSDataSource implements DataSource {
...
public String loadSomeDataFromDataSource() {
...Do some stuff...
}
}
public class NoSQLDataSource implements DataSource {
...
@Override
public String loadSomeDataFromDataSource() {
...Do some other stuff...
}
}
public class DataSourceClient {
public void foo() {
DataSource ds = new NoSQLDataSource();
ds.loadSomeDataFromDataSource();
}
}
Другим вариантом будет композиция. Скажем, у вас есть сотрудники и клиенты. Ваши два варианта будут ...
public class Person {
protected String name;
protected String address;
...More stuff...
}
public class Employee extends Person {
protected String jobCode;
protected String department;
...More stuff...
}
public class Customer extends Person {
protected String salesPerson;
protected Date registrationDate;
...More stuff...
}
... или ...
public class ContactInfo {
private String name;
private String address;
...More stuff...
}
public class Employee {
private ContactInfo contactInfo;
private String jobCode;
private String department;
...More stuff...
}
public class Customer {
private ContactInfo contactInfo;
private String salesPerson;
private Date registrationDate;
...More stuff...
}
Поскольку Java не имеет множественного наследования, и вы можете реализовать несколько интерфейсов, иногда вам нужно выполнить вышеизложенное, чтобы убедиться, что ваша разработка чиста и читаема.