在同一个对象上使用抽象和接口而不必转换它

Using abstraction and interface on the same Object without having to cast it

我想在同一个对象上使用抽象(来自母亲 class)和接口,而不必转换它。

我已经搜索过了,似乎转换是用于此类目的的常用方法。

我有一个程序,其中 Dog 扩展 Animal 实现 Friendly

动物让狗 yell() 友好(界面)让他 hug() 在使用 Friendly(Interface) 之前,我曾经这样做过:

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

但是现在,要添加接口,我必须将狗转换成这样的 Friendly 类型,以便他可以 hug() :

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

有没有更好的方法来做到这一点,因为我的老师告诉我,铸造通常是一个坏主意。

如果您需要避免转换,则必须使用 Dog 作为 dog 变量的类型:

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

尽管如此,您并不是针对 FriendlyAnimal 接口进行编程,但在正确使用抽象的情况下,理想情况下您应该这样做。 如果您必须 在代码中将 dog 声明为 AnimalFriendly,那么您使用抽象的原因是错误的。

...my teacher told me that casting was usually a bad idea.

选角是一件没人喜欢做的事,但每个人都必须在必要的时候去做。