Вот есть главный класс Animal, у него есть метод eat
под него создается класс Dog, у него появляется ссылка на метод eat, то есть объект
Мы можем создать новые методы, которые не будут объектами, а можем переопределить родительский метод
Но тогда мы изменяем метод в родительском классе, но ведь после вызова метода родительского класса будет вызываться метод, который не был переопределен, но мы же его переопределили, почему?
Java
Java не понимаю кое что
Наследники класса Animal, например Dog, могут переопределить методы родительского класса Animal. Такие объекты можно использовать в программе в любом месте там, где требуется Animal, но вызываться будут методы, определённые в классе наследнике. Это логично, потому что Dog является Animal, но в переменной с типом Animal хранится объект Dog, у которого и вызывается метод. Если я создам список ArrayList<Animal>, в котором хранится множество различных животных: Cat, Dog, Bird, и пройдусь по списку в цикле, то вызываться будут соответственно методы животных (переопределённые методы), а не методы класса Animal (кроме тех, которые не были переопределены), что не имело бы никакого смысла при использовании наследования. Так как наследование существует именно для того, чтобы я мог подменять объекты и логику объектов новыми объектами, при этом чтобы не сломалась программа. Один из принципов проектирования SOLID (конкретно буква L), говорит о том, что наследники некоего класса должны быть способны подменить объекты основного класса при наследовании.
Когда вы переопределяете метод в классе-потомке, то при вызове этого метода у объекта класса-потомка будет вызываться переопределенная версия метода, а не родительская. Это называется полиморфизмом, и он позволяет классам-потомкам изменять поведение унаследованных методов.
Если вы вызываете метод на объекте класса-потомка, то будет выполнена переопределенная версия этого метода из класса-потомка. Однако, если вы явно хотите вызвать родительскую версию метода внутри переопределенного метода класса-потомка, вы можете использовать ключевое слово `super`.
Например, если у вас есть класс `Animal` с методом `eat`, и класс `Dog` наследует от класса `Animal` и переопределяет метод `eat`, то при вызове метода `eat` у объекта класса `Dog`, будет выполнена версия метода `eat` из класса `Dog`. Если вы хотите вызвать родительскую версию метода `eat` внутри класса `Dog`, вы можете использовать ` super.eat ()`.
Если вы вызываете метод на объекте класса-потомка, то будет выполнена переопределенная версия этого метода из класса-потомка. Однако, если вы явно хотите вызвать родительскую версию метода внутри переопределенного метода класса-потомка, вы можете использовать ключевое слово `super`.
Например, если у вас есть класс `Animal` с методом `eat`, и класс `Dog` наследует от класса `Animal` и переопределяет метод `eat`, то при вызове метода `eat` у объекта класса `Dog`, будет выполнена версия метода `eat` из класса `Dog`. Если вы хотите вызвать родительскую версию метода `eat` внутри класса `Dog`, вы можете использовать ` super.eat ()`.
Александр Дюжиков
Если действительно вызывается переопределенный метод в классе Dog, а не в родительском классе Animal, то метод по логике уже не будет являться объектом, если он не ссылается на родительский метод. Но это нелогично, потому что если Animal animal = new Dog и я вызову метод eat, то метод eat вообще не вызовется, потому что он уже не будет являться объектом, я все равно не допер
Похожие вопросы
- Помогите пожалуйста, изучаю язык Java. Не понимаю как написать код((
- Всем привет. Помогите плз. Мне нужна помощь тех кто действительно хорошо знает Java т. к мне нужно выбрать один из курсов
- Помогите доделать код на java. В форму пользователь вводит символ, который нужно заменить на #.
- Не выводит изображение в JAVA
- Java проблема с рефлексией.
- Java Developer vs Android Developer. Куда дальше?
- Пишут ли стартапы на Java?
- С какой книги начинать изучение Java?
- Помогите сделать java приложение! { СРОЧНО }
- Java и какой толк работать именно в консоле?
то есть это и есть реализация полиморфизма
если переопределить метод, то eat() все равно скопируется у класса Animal, и соответственно вызовется метод класса Animal, а не переопределенный класса Dog