instanceof
关键字可以判断一个对象是不是某一个类的实例,经常和多态联系起来。
Java 实现多态有几种方式?
多态案例:
public class Main {
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; // 税率10%
}
}
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;
}
}
多态的好处:允许添加更多类型的自雷实现功能扩展,却不需要修改给予弗雷的代码。
final
关键字:
final
修饰的方法不能被 Override
final
修饰的类不能被继承final
修饰的字段在初始化后不能被修改重写和重载的区别:
Override
)是父类与子类之间多态性的一种表现。重写实现与子类中。Overload
)是一个类中多态性的表现。重载实现于一个类中。类可以重写 toString
方法,然后调用 System.out.println(javabean)
来调用对象的 toString
方法。
<aside> ⚠️ 多态不能调用子类独有的功能。
</aside>