Использование абстракции и интерфейса на одном объекте без необходимости его приведения - PullRequest
0 голосов
/ 22 декабря 2018

Я хотел бы использовать абстракцию (из родительского класса) и интерфейс для одного и того же объекта без необходимости его приведения.

Я уже искал об этом, и кажется, что приведение является распространенным методомдля такого рода целей.

У меня есть программа, в которой Dog расширяет Animal реализует Friendly

Животное позволяет собаке yell(), а Дружественный (интерфейс) позволяет ему hug() Перед использованием FriendlyИнтерфейс), я обычно делал это:

Animal dog = new Dog();
dog.yell();

, но теперь, чтобы добавить интерфейс, мне нужно привести собаку в дружественный тип, чтобы он мог обнять ():

Animal dog = new Dog();
dog.yell();
((Friendly) dog).hug();

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

1 Ответ

0 голосов
/ 22 декабря 2018

Если вам нужно избегать приведения, то вы должны использовать Dog в качестве типа вашей dog переменной:

Dog dog = new Dog();
dog.yell();
dog.hug();

Тем не менее, вы не программируете на *Интерфейсы 1006 * и Animal, которые в идеале следует делать, когда абстракция используется правильно. Если вы должны объявить dog как Animal или как Friendly в коде, как это, то вы используете абстракцию по неправильным причинам.

..Мой учитель сказал мне, что кастинг, как правило, плохая идея.

Кастинг - это то, что никто не любит делать, но каждый должен делать это, когда это необходимо.

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