Единичное наследование
Если же явный вызов родительского конструктора отсутствует, компилятор сам вставит вызов родительского конструктора без параметров. Java не поддерживает приватное и защищенное наследование, реализованное в языке C++. Дело в том, что разработчики языка считают: подклассы должны быть подтипами, чему противоречит приватное и защищенное наследование. Ранние версии языка Java включали коллекцию Vector, содержащую множество методов для обработки данных.
Кроме
494 Глава 16. Объектно-ориентированное и аспектно-ориентированное программирование |
того, предлагался подкласс вектора — Stack, добавлявший методы для операций push() и pop(). Поскольку в языке нет приватного наследования, все методы вектора были видимы в классе Stack, поэтому объекты допускали использование целого ряда операций, некорректных для стека. В языке C++ для обеспечения динамического связывания метод должен быть определен как виртуальный. В языке Java сообщения динамически связываются со всеми методами. Исключением является метод с пометкой final, который не может переопределяться и связывание с которым является статическим. Статическое связывание применяется также, если метод помечен как static или private; любая из этих пометок запрещает переопределение. |