1) - false, потому что в Java «extends» - это особая операция, которая наследует как все структуры данных, так и реализацию всех методов. В Java класс может расширять только один суперкласс. однако в Java вы можете реализовать любое количество интерфейсов , которые только "вводят" имя и подпись функций, которые вы должны реализовать.
Причиной этого является то, что расширенные множественные базовые классы - которые называются «множественным наследованием» - считаются запутанными. Это немного вопрос религиозной войны; C ++ поддерживает множественное наследование, Java и Smalltalk - нет, а Ruby вместо этого позволяет смешивать модули с тем же эффектом, что и множественное наследование.
2) Вы МОЖЕТЕ передать что-то как абстрактный класс. Рассмотрим, например, абстрактный класс Shape с конкретными подклассами Circle, Square и Triangle. Все они являются «разновидностями» формы, поэтому вы передаете Shape любой операции, которая должна работать для всех.
3) Единственная перестройка в том, что вы можете сделать класс финальным, что не позволяет подклассам. Не имеет смысла делать абстрактный класс финальным; Вы никогда не сможете его использовать.
4) Да, и вот как вы избавляетесь от необходимости иметь возможность расширять несколько классов; Интерфейсы - это способ получить что-то вроде множественного наследования.
5) Конечно, возможно реализовать стек в виде двусвязного списка. Более того, в определенных ситуациях вы бы хотели. Рассмотрим, к примеру, что-то, что вы хотели бы иметь возможность отображать весь стек, не нарушая его. Тогда может быть полезно расширить этот стек неразрушающей операцией «показать все». В стеке, реализованном в связанном списке, вы можете «пройтись» по всему списку и «пройтись» обратно к голове.