java - Java中的多态性有什么替代方法吗?
问题描述
我正在阅读一篇关于 Java 面试常见问题的文章,并被困在一个问题上:“多态性的替代方案是什么?”
我搜索了它,但没有得到任何合理的答案。
Java中是否有替代多态性的方法?如果是,那是什么?
解决方案
在 Java 中使用多态的替代方法是使用instanceof
和类型转换。
这不是很好的选择...
这是一个例子来说明我的意思:
public interface Animal {
String makeSound(); // polymorphic method ...
}
public class Cat implements Animal {
public String makeSound() { return "meow"; }
}
public class Dog implements Animal {
public String makeSound() { return "woof"; }
}
// polymorphic:
Animal someAnimal = ...
System.out.println("Animal sound is " + someAnimal.makeSound());
// non-polymorphic
if (someAnimal instanceof Cat) {
System.out.println("Animal sound is " + ((Cat) someAnimal).makeSound());
} else if (someAnimal instanceof Dog) {
System.out.println("Animal sound is " + ((Dog) someAnimal).makeSound());
}
请注意,非多态版本显然更冗长。但问题是,非多态版本将工作,如果Cat
并且Dog
没有与makeSound()
方法的公共接口。
推荐阅读
- reactjs - React Hooks useState 与 Object 不一致
- python - 空视图上的Django rest框架错误:必须先呈现响应内容,然后才能对其进行迭代
- javascript - 向 twitter api 发出 Oauth2 请求
- android - 在recyclerview中单击项目时如何获取项目名称?
- wordpress - 在 WordPress 中为当前登录用户设置临时变量
- asp.net-mvc - 移除的区域仍然作为区域路由
- swift - ZOHO CRM 未获得刷新令牌作为响应
- android - 为什么我的 ImageUri 没有显示在 setView 的 AlertDialogBox 中?
- c++ - std::string 添加到 char*
- sql - sql 中这种 case 表达式的一种更简洁的方法