Ну с правилом, когда нужно принять наиболее базовый тип- тут все понятно:
Если моему коду не нужна какая-то фича более конкретного типа, то принимаю на вход метода наиболее абстрактный тип.
А вот, как быть с возвращаемым типом? Ведь я не знаю, как пользователь захочет этим пользоваться.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей