多态是什么?
多态是一个概念,从字面意思理解,是指一个事物可以有不同的形态。
具体到面向对象编程中, 是指一个类的同一个方法可以有不同的实现形式,但是对外暴露同样的接口。
多态有什么用?
多态可以解决复杂的面向对象开发中,保持接口一致性的问题, 可以提升代码可维护性和可阅读性。
多态怎么用?
之前用PHP 讲解过一次多态,可以参考 PHP多态
今天尝试用Java的实例讲下,可以对比下有什么不同。
下么是测试代码。
public class PolymorphicMain {
public static void main(String[] args) {
Income[] incomes= new Income[]{
new Income(3000),
new Salary(7500),
new StateCouncilSpecialAllowance(15000)
};
//计算三个收入类型人的总税收
System.out.println(totalTax(incomes));
}
public static double totalTax(Income... incomes) {
double total = 0;
for (Income income: incomes) {
total = total + income.getTax();
}
return total;
}
}
// 适用于普通收入人群
class Income {
protected double income;
public Income (double income) {
this.income = income;
}
public double getTax() {
return income * 0.1;
}
}
//适用于工资收入人群
class Salary extends Income {
public Salary(double income) {
super(income);
}
@Override
public double getTax() {
if(income <= 5000){
return 0;
}
return (income -5000) * 0.2;
}
}
//使用特殊免税收入人群
class StateCouncilSpecialAllowance extends Income {
public StateCouncilSpecialAllowance(double income) {
super(income);
}
@Override
public double getTax() {
return 0;
}
}
注意:
- Java代码文件名要跟标记为Public(公开类型)的类名一致,一个Java 文件中只能定义一个Public类型的类
- @Override 是一个注释, 可以被编译器读取, 即告诉编译器这个方法是一个重载方法,要覆盖基类的对应方法
- main 函数是程序的入口函数
代码说明:
- 代码中定义了三中收入类型的人Income普通收入人群,Salary工资收入人群,StateCouncilSpecialAllowance享受特殊权限的免税人群
- main 方法中,构建了一个数组,存放三个收入类型的实例对象。通过调用 totalTax 方法计算三个人的税收总和。
- 多态体现在: 在totalTax中,计算三个人各自税收时,我们不需要里面具体的实现细节,通过统一的 getTax 方法既可获得。
- 当我们后面要修改各自具体计算税收的方法时,只需要修改对应的类中的getTax方法既可,这样就提升了代码的可维护性。
转载请注明:大后端 » 对多态的理解(Java版本)