我想在同一个对象上使用抽象(来自母类)和接口(interface),而无需对其进行强制转换。
我已经搜索过它,似乎强制转换是实现这种目的的常用方法。
我有一个程序,其中 Dog
扩展 Animal
实现 Friendly
动物让狗yell()
,友好(界面)让他hug()
在使用Friendly(Interface)之前,我曾经这样做过:
Animal dog = new Dog();
dog.yell();
但是现在,要添加界面,我必须将狗转换为像这样的友好类型,以便他可以拥抱():
Animal dog = new Dog();
dog.yell();
((Friendly) dog).hug();
有没有更好的方法来做到这一点,因为我的老师告诉我,选角通常是一个坏主意。
最佳答案
如果您需要避免强制转换,则必须使用 Dog
作为 dog
变量的类型:
Dog dog = new Dog();
dog.yell();
dog.hug();
但是,有了这个,您就不会针对 Friendly
和 Animal
接口(interface)进行编程,而理想情况下,您应该在正确使用抽象时执行这些操作。
如果您必须在代码中将 dog
声明为 Animal
或 Friendly
,就像这样,那么您正在使用抽象出于错误的原因。
...my teacher told me that casting was usually a bad idea.
选角是一件没有人喜欢做的事情,但每个人在必要的时候都必须这样做。
关于java - 在同一对象上使用抽象和接口(interface),而无需对其进行强制转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53896076/