Полиморфизм и отношения наследования - PullRequest
0 голосов
/ 10 июля 2020

Итак, я читаю первую книгу Java, и когда она объясняет наследование сразу после этого, она переходит к полиморфизму, не говоря, как они связаны и в чем преимущества.

Он просто говорит, что делает ваш код гибкий, а другие могут повторно использовать ваш код. Если честно, это так сбивает с толку. Я знаю, что такое наследование, и не могу сказать, что понимаю полиморфизм.

Я пробовал смотреть несколько видеороликов на YouTube, и то, что я понимаю из полиморфизма, это то, что у вас есть суперкласс и подклассы, и вы используете массив для l oop через подклассы для выполнения некоторых функций.

Ответы [ 2 ]

0 голосов
/ 12 июля 2020

Наследование НЕ предназначено для повторного использования кода, оно предназначено для подстановки. Когда думают о наследовании, повторное использование кода случается .

Многие разработчики думают о возможности повторного использования, когда думают о наследовании, но имейте в виду, что это неправильная аргументация. Для повторного использования кода следует отдавать предпочтение композиции, а не наследованию.

Когда вы думаете о замене, вы можете думать о наследовании.

Практический пример понимания полиморфизма - это когда вы смотрите на шаблон проектирования под названием «Стратегия ".

Стратегия позволяет изменять алгоритм во время выполнения без изменения компонента оркестратора.

Например, представьте себе видеоигру, в которой вы управляете солдатами с развивающимся оружием.

Main алгоритм (алгоритм оркестратора) заключается в перемещении солдата и поражении любого врага. Уровень 1, у вас есть нож. Уровень 2, у вас будет пистолет. Уровень 3, у вас будет бомба. Et c.

Вы не хотите явно иметь дело с каким-либо оружием в рамках вашего основного алгоритма, вам нужен такой псевдокод внутри, скажем, класс Soldier:

hit() {
   weapon.use(); // so generic ! 
} 

вместо:

hit() {
  if(weapon instance of Knife)
     ....
  else if(weapon instance of Gun) 
     ....
  else if(weapon instance of Bomb) 
     ....
  // what if you create another weapon for a further level...you would have to alter this class to add another 'else if' clause, bad!
} 

Итак, чтобы использовать первый способ, более краткий и solid, вам придется использовать полиморфизм, создав подклассы Weapon класса с соответствующими подклассами (Knife, Gu, Bomb) реализация метода use.

Полиморфизм = weapon может принимать несколько форм / структур / поведения во время выполнения.

Итак, в В этом случае вы используете composition, чтобы изменить используемое оружие во время выполнения, и вы используете полиморфизм, чтобы оркестратор не знал точное используемое оружие.

Это делает код гибким, надежным и простым в обслуживании.

0 голосов
/ 12 июля 2020

Наследование используется для повторного использования кода, в то время как при полиморфизме вы перегружаете функцию, которая использует одно и то же имя для метода / функции, но может выполнять другую задачу, компилятор знает, когда использовать что из-за их другой сигнатуры, т.е., возможно, их параметры другой или возвращаемый тип et c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...