Змінюй хід війни! Допомагай ЗСУ!

Java. nameOfObject.equals(nameOfObject)

🟢 01:26 Відбій тривоги в м. Харків та Харківська територіальна громада.Слідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • 🟢 01:26 Відбій тривоги в м. Харків та Харківська територіальна громада.Слідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #21
2) объект подкласса можно использовать вместо любого объекта суперкласса называется принцип постановки.
например: Объект подкласса Manager можно присвоить переменной суперкласса

Employee e;
e = new Employee(...);
e = new Manager(...)*

можно вообще вот так:
Код:
Object obj;
obj = new Employee(...);
obj = new Manager(...)*

а суть заключается в том что ты можешь вызвать у объекта находящегося в переменной obj метод equals, т.к. этот метод описан в классе Object, от которого наследуются и Employee и Manager. При этом то, какой код будет выполнен будет зависеть от того какой именно объект находится в переменной.

Код:
Object obj;
obj = new Employee(...);
obj.equals(aaa);     // отработает метод Employee.equals
obj = new Manager(...)*
obj.equals(aaa);     // отработает метод Manager.equals

Если ты не перегружал equals в Employee и Manager, то будет вызван код, определенный в Object.equals. А если перегрузил, то будет вызван перегруженный тобой метод. Это и есть полиморфизм.
 
  • 🟢 01:26 Відбій тривоги в м. Харків та Харківська територіальна громада.Слідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #22
Что я должен был понять в полиморфизме, хрен его знает. :D

вот вам полиморфизм на вашем примере. у вас есть класс Работник. у него, допустим, есть метод "уволить". создадим Работнику двух наследников - Менеджер и Уборщик. в каждом из этих классов переопределим метод "уволить". в классе Менеджер этот метод будет начислять работнику три оклада и давать путевку в Турцию. а в классе Уборщик метод "уволить" будет вычитать три оклада и давать путевку в Ад.

в какой-то момент вы решаете всех уволить. берете список всех работников, то есть список объектов класса Работник. неважно кто из них менеджер, а кто уборщик, просто List<Employee>. проходите по этому списку и вызываете метод "уволить". это можно сделать, поскльку такой метод есть в классе Работник. но в рантайме жава уже будет знать, кто из этих работников менеджер, а кто уборщик. соответственно, сама аккуратно вызовет переопределенные методы для каждого из них.

польза налицо - вам не пришлось выполнять никаких проверок собственноручно. более того, если завтра вы захотите добавить ещё один тип работника - ВкручивательЛампочек, например - вам ничего не нужно будет менять в коде, который увольняет по списку всех работников, потому что в нем нет никакой связи с конкретными реализациями класса Работник (который, кстати, может быть вообще абстрактным классом или интерфейсом).

в общем, это называется, добро пожаловать в ООП ))
 
  • 🟢 01:26 Відбій тривоги в м. Харків та Харківська територіальна громада.Слідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #23
HelloWorld

Спасибо. Принцип понял. :) Разжевали очень доходчиво.

Только я не понял Klez(а)
Полиморфизм заключается в том что ты можешь работать с объектами неизвестных классов, при условии что они являются наследниками известного тебе класса.
Почему неизвестные классы? Догадываюсь, потому что хрен его знает, кто писал эти классы и какие они есть. Т.е. программисту-клиенту это не интересно, он не должен знать об этом.

P.S. В интернете есть видеоурок по Java, сделали какие-то ребята.

Как пример полиморфизма, они показывают переопределение метода. Из Вашего примера, это применить увольнение сотрудника с дополнительными условиями. Т.е. подкласс Менеджер имеет свои условия, Уборщики свои. Но это же не полиморфизм? Сам принцип тесно связан с ним, но увольнять какой-то подкласс можно вообще без какого-то переопределения.

Я понимаю так, что они не раскрыли определение полиморфизма. :незнаю:
 
Останнє редагування:
  • 🟢 01:26 Відбій тривоги в м. Харків та Харківська територіальна громада.Слідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #24
Как пример полиморфизма, они показывают переопределение метода. Из Вашего примера, это применить увольнение сотрудника с дополнительными условиями. Т.е. подкласс Менеджер имеет свои условия, Уборщики свои. Но это же не полиморфизм?

мой пример - это и есть переопределение метода уволить() в классах-наследниках класса Работник. увольнение по списку я привел как пример полезности полиморфизма. кстати, что вы здесь называете условиями?

увольнять какой-то подкласс можно вообще без какого-то переопределения.

ну, как сказать.. если Работник - это реальный класс и у него реализован метод уволить(), то да, его можно не переопределять в классе Уборщик, например. и тогда при вызове этого метода у объекта класса Уборщик вызовется на самом деле метод из базового класса, т.е. Работник. но Работник может быть вообще интерфейсом, то есть, там не будет никакой реализации, будет только описано, что у класса, имплементирующего этот интерфейс, должен быть метод уволить(). и тогда вам уже будет необходимо его реализовать в наследниках.
 
  • 🟢 01:26 Відбій тривоги в м. Харків та Харківська територіальна громада.Слідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #25
HelloWorld

Т.е. полиморфизм это переопределение метода? :D Можете сформулировать в одном предложении, что это? :)

Условиями? Т.е. переопределение метода для каждого класса своё.
из Вашего примера метод "уволить". в классе Менеджер этот метод будет начислять работнику три оклада и давать путевку в Турцию. а в классе Уборщик метод "уволить" будет вычитать три оклада и давать путевку в Ад.
увольняются сотрудники с разными условиями, т.е. метод по-разному замещается.

P.S. Чувствую, что если я не усвою это хорошо, дальше идти смысла нет. :))))
 
  • 🟢 01:26 Відбій тривоги в м. Харків та Харківська територіальна громада.Слідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #26
Т.е. полиморфизм это переопределение метода? :D Можете сформулировать в одном предложении, что это? :)

нет, это возможность использовать объект, зная от кого он унаследован, но не зная класс у этого объекта. Например метод equals может быть реализован по разному в разных классах. Но ты его можешь вызвать у объекта даже не зная класс этого объекта.
 
Назад
Зверху Знизу