Вы бы использовали самый суперкласс или идеальный интерфейс, который подходит. Это свидетельствует о том, в коде минимальной функциональности вам нужно, и если вам нужно изменить код из
A var = new B();
в
A var = new C(); // C also extends A
Это тривиально. Однако, если вы используете B
всюду, вы делаете mroe работу для себя позже, чтобы изменить и проверить код.
Единственным исключением является то, что вы можете сделать объект слишком общим и пропустить некоторое важное поведение. например
void methodIsInSet(Set<T> set);
может быть заменен
void methodIsInSet(Collection<T> set);
как методы одинаковы, но оставляет то, что может быть важным предположения о дубликатах и т.д.
Полиморфизм. Иногда вы хотите лечить группу Bs и As as As. Это позволяет вам выполнять общие действия над всем, что наследует от A, и вы можете использовать отношения 'is a'. –
Вы имеете в виду, конечно, 'A var = new B();' – vikingsteve