在同一个对象上使用抽象和接口而不必转换它
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();
尽管如此,您并不是针对 Friendly
和 Animal
接口进行编程,但在正确使用抽象的情况下,理想情况下您应该这样做。
如果您必须 在代码中将 dog
声明为 Animal
或 Friendly
,那么您使用抽象的原因是错误的。
...my teacher told me that casting was usually a bad idea.
选角是一件没人喜欢做的事,但每个人都必须在必要的时候去做。
我想在同一个对象上使用抽象(来自母亲 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();
尽管如此,您并不是针对 Friendly
和 Animal
接口进行编程,但在正确使用抽象的情况下,理想情况下您应该这样做。
如果您必须 在代码中将 dog
声明为 Animal
或 Friendly
,那么您使用抽象的原因是错误的。
...my teacher told me that casting was usually a bad idea.
选角是一件没人喜欢做的事,但每个人都必须在必要的时候去做。