返回
多态:展现出多种状态下的多种实现方式!
见解分享
2023-11-12 08:38:34
多态性,是多种形态,而这多种形态背后同一个思想。在编程的世界里,它则赋予了代码可扩展性、灵活性以及易维护性,因此我们姑且称之为“代码形态的可变性”。
当然,我们可以使用多个if else语句判断各种类型,以判断系统如何处理不同种类的对象,例如我们构建了一个“宠物登记系统”,针对不同的宠物,如狗、猫、鸟,提供不同的登记流程,倘若我们使用多个if else语句:
if (animal.type == "dog") {
// 狗的登记流程
} else if (animal.type == "cat") {
// 猫的登记流程
} else if (animal.type == "bird") {
// 鸟的登记流程
}
这样看起来确实可以工作,但倘若后续又出现了其他类型的动物呢?代码需要修改,倘若过程更为复杂呢?代码需要再修改。
倘若采用面向对象的思想,我们无需编写多个if else语句,只需一个父类“动物”类,每个子类(狗、猫、鸟)继承该父类,建立一个名为“register()”的方法,在子类中重写它,其对应了各自的登记流程,看看下面的代码:
class Animal {
public void register() {
// 通用登记流程
}
}
class Dog extends Animal {
@Override
public void register() {
// 狗的登记流程
}
}
class Cat extends Animal {
@Override
public void register() {
// 猫的登记流程
}
}
class Bird extends Animal {
@Override
public void register() {
// 鸟的登记流程
}
}
// 使用多态性
Animal animal = new Dog();
animal.register(); // 调用狗的登记流程
animal = new Cat();
animal.register(); // 调用猫的登记流程
animal = new Bird();
animal.register(); // 调用鸟的登记流程
代码的可维护性得到了很大的提升。
再举一个更为复杂的例子,一个任务管理系统,使用人员具有不同的权限等级,管理员有更多的权限,普通用户则有更少的权限。
一个具有继承关系的类结构可以帮我们解决这个问题:
class User {
public String username;
public String password;
public boolean login(String username, String password) {
// 登录逻辑
}
}
class Admin extends User {
public boolean addUser(String username, String password) {
// 添加用户逻辑
}
public boolean deleteUser(String username) {
// 删除用户逻辑
}
}
class RegularUser extends User {
public boolean viewTasks() {
// 查看任务逻辑
}
public boolean updateTasks() {
// 更新任务逻辑
}
}
对于所有用户来说,他们都有相同的登录方式,但是对于管理员和普通用户来说,他们具有不同的权限,可以在不同的范围内操作任务。
多态的好处不言而喻:
- 代码可维护性大大提高,增加新的功能,只需要创建新的子类并重写方法,避免了反复的if else判断。
- 代码可扩展性更强,例如,增加一个新的动物类型,只需要创建一个新的子类并重写register()方法,原始代码无需修改。
- 代码更具灵活性,无论对象在运行时如何变化,都可以使用相同的接口与它们交互。
多态,是面向对象编程的核心特征之一,给予我们的程序设计思想更高的灵活性和扩展性,无论应用程序如何变化,它都有很大的适应性。