Я думаю, что это общий пример из реальной жизни:
Это может быть немного дальше от того, что вы просили, но допустим, что мы используем среду ORM, такую как Hibernate (не нужно действительно беспокоиться о том, что это такое или что это значит, просто знайте, что мы в основном собираемся вставить / обновление и извлечение объектов из базы данных).
Для каждой таблицы, в которую мы хотим вставить, у нас будет уникальный объект доступа к базе данных (DAO) для выполнения нашего набора требуемых операций с базой данных, но важно отметить, что все DAO будут выполнять некоторые аналогичные задачи, поэтому вот где абстрактные классы могут прийти нам на помощь. Мы можем объявить класс AbstractBaseDao, в котором изложены некоторые основные операции, которые могут нам понадобиться для всех наших DAO:
public class AbstractBaseDao {
public void saveOrUpdate(Object o){
//save or update object from database
}
public void loadAll(Class clazz){
//Load all from database
}
public Object loadById(Class clazz, Long id){
// Retrieve object by Id from database
}
// Additional common methods
}
Итак, еще раз, не очень важно, как эти методы реализованы для этого примера, просто поймите, что все DAO нуждаются в этих методах, и абстрактный класс дает нам повторное использование кода среди классов.
Теперь с нашим BaseDao мы можем создавать конкретные и специальные DAO для каждой таблицы, которые по-прежнему имеют желаемую общую функциональность:
public class PersonDao extends AbstractBaseDao{
public List<People> listAllPersonsByLastName(String lastName){
//Load people by last names from database
}
public List<People> listAllPersonsByBirthYear(Date date){
//List people by birth year from database
}
}
Теперь PersonDao может выполнять любые конкретные задачи, и мы не тратим время на переписывание кода, который мы уже написали. Хороший пример повторного использования кода.
Я думаю, что это довольно распространенный пример использования абстрактных классов в отрасли, поэтому я надеюсь, что это поможет с тем, что вы искали.