План уровня:
Что еще можно посмотреть на досуге:
Глава "Полиморфизм" в Thinking in Java
Для чего нужен super - официальная версия
Тут можно скачать краткую инструкцию по хоткеям в IntelliJ Idea
Нашли классную ссылку к материалу данной темы? Добавьте ее сюда в виде комментария. Возможно, именно Ваша ссылка поможет другому человеку стать программистом и улучшить свою жизнь!
Вернуться к плану обучения
Вернуться к обучению java онлайн на JavaRush
- Основы ООП: перегрузка, полиморфизм, абстракция, интерфейсы.
- Полиморфизм детально
- Переопределение методов
- Приведение ссылочных типов: расширение и сужение. type cast
- Динамическая диспетчеризация методов
- Доступ к методам базового класса - super
- instanceof
- Перегрузка методов
- Абстрактные классы
- Интерфейсы

Нашли классную ссылку к материалу данной темы? Добавьте ее сюда в виде комментария. Возможно, именно Ваша ссылка поможет другому человеку стать программистом и улучшить свою жизнь!
Вернуться к плану обучения
Вернуться к обучению java онлайн на JavaRush
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Как Вы думаете дженерики это все-таки полиморфизм или нет?)
В лекции сказано следующее:
А на intuit.ru следующее, то есть всё наоборот, поменяны понятия сужения и расширения типов:
То есть в лекции 12 переход от производного класса (дети) к базовому (родители) называют «классическим сужением типа», а на интуите «переход от детей к родителям» называют расширением. Где же правильно, или что-то я не правильно понимаю? Спасибо
А вообще да — когда преобразовывают к наследнику это нисходящее преобразование и наоборот.
теперь это…
Я считаю правильно так: от общего к конкретному – сужение типов, а с точки зрения доступных методов назвали бы расширение функциональности/ возможностей/ содержимого типа.
@Override — означает, что мы переопределяем метод, описанный в суперклассе
в «Философии Java» и других источниках написано, что наследование применяется там, где есть связь «является».
Кит ведь не является коровой.
Вывод:
class A
Что это, если не наследование статического метода?
С другой стороны, напиши мы реализацию этого метода в B, то есть переопредели его, то при вызове B.method, мы получим выполнение действий, описанных в реализации класса B. Что это, если не переопределение статического метода?
Вывод:
class B
Да, если в этом случае создать экземпляр класса B в переменной класса A и вызвать у нее этот статический метод, то вызовется реализация, описанная в классе A
Вывод:
class A
Но тут надо просто сказать, что при вызове статического метода у переменной компилятор вместо нее подставляет ее тип, и не смотрит, что в ней содержится. Т.е. следующин 2 вызова статических методов аналогичны:
Для статических методов механизм динамической диспетчеризации не применим, по определению.
а значит полиморфизм для них не работает. как то так…
альтернативная страница — это Глава «Полиморфизм» в Thinking in Java
или это другая статья на эту же тему?
оригинал:
статья:
Например
Наверное есть смысл упомянуть об этом в самом уроке.
В лекции №12 сказано, что наследовать и переопределять можно только не статические методы. Так же говориться, что статические методы не наследуются и, следовательно, не переопределяются.
Решил проверить. У меня всё наследуется и переопределяется:
Вот вывод:
«C:\Program…
Method.
In Heir.
In Main.
Process finished with exit code 0
Где ошибка?
Вывод:Method in Parent.
Вывод:In Heir. Overridden
Статик метод, который будет вызываться определяется типом, а не объектом.
И вообще вызывать статик метод от объекта неправильно.=)
Просто, прочитав «что статические методы не наследуются и, следовательно, не переопределяются» я не совсем понял о чем идёт речь.
Спасибо за ответ.
не должен ли класс наследовать еще и интерфейс Element(описан выше данного)? или только его. Было бы логично — все методы оттуда реализованы в потомке (getX, getY + из Drawable и HasValue).
Ругается:
Такой код не проходит компиляцию, так как супер должен быть первым. Что можно предложить в замен? Класс Container является тоже наследником Абстрактного класса.
Смысл в том, чтобы в Контейнер помещались только Твердые_Материалы.
Попробуй конструктор создай Container(SolidMaterial material, int cargoWeight) и его вызови в основном, как-то так. По коду могут быть ошибки, но мысль такая.
Ты можешь написать нужный тебе метод в родительском классе. И вызывать его вместо
super(material, cargoWeight);
Глава «Полиморфизм» в Thinking in Java
давно уже как не дает возможности прочитать про Полиморфизм.
Может где в другом месте можно почитать?
www.jetbrains.com/idea/docs/IntelliJIDEA_ReferenceCard_Mac.pdf
same for Win and Linux
www.jetbrains.com/idea/docs/IntelliJIDEA_ReferenceCard.pdf