ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java面向对象5--多态

2022-01-18 12:02:39  阅读:179  来源: 互联网

标签:Java -- 覆写 多态 final Income return 方法 public


1.多态的定义

多态是指,在子类继承父类之后,可以覆写父类中的方法,在多个子类调用覆写之后,会存在多个同名的方法。即多态指的是在调用某个类型的方法时,是基于运行时实际类型的动态调用,这就称之多态。

2.注意事项

方法名相同,参数相同,返回值不同,属于不同的方法,重写时,可以通过加@Override,防止自己重写的方法错误。

3.覆写方法

(1).覆写自己写的方法

例如:

将收入报税,每个类型的收入,所需要的缴纳的税率不同

定义普通收入

class Income {
    protected double income;
    public double getTax() {
        return income * 0.1; // 税率10%
    }
}

工资收入所需缴纳的税额:

class Salary extends Income {
    @Override
    public double getTax() {
        if (income <= 5000) {
            return 0;
        }
        return (income - 5000) * 0.2;
    }
}

对于国务院特殊津贴,全部免税

class StateCouncilSpecialAllowance extends Income {
    @Override
    public double getTax() {
        return 0;
    }
}

所需要报税的计算

public double totalTax(Income... incomes) {
    double total = 0;
    for (Income income: incomes) {
        total = total + income.getTax();
    }
    return total;
}

 主方法中则需要调用对应的类型收入方法,传值计算

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));
    }

 (2).覆写Object方法

Object方法中有几个重要的定义的方法

1.toString():转换成字符串

2.equal():判断两个instance是否逻辑相等;

3.hashCode():计算一个instance的哈希值。

在必要的时候可以对于Object进行一个覆写

class Person {
    ...
    // 显示更有意义的字符串:
    @Override
    public String toString() {
        return "Person:name=" + name;
    }

    // 比较是否相等:
    @Override
    public boolean equals(Object o) {
        // 当且仅当o为Person类型:
        if (o instanceof Person) {
            Person p = (Person) o;
            // 并且name字段相同时,返回true:
            return this.name.equals(p.name);
        }
        return false;
    }

    // 计算hash:
    @Override
    public int hashCode() {
        return this.name.hashCode();
    }
}

4. 调用super

子类覆写方法之后,还想调用父类的方法,则需要使用super.方法名(参数);

5.final

当方法,字段名之前加入final,则子类不可以对于父类的有final字段的进行调用、继承和覆写。

当实例化对象之后,带有final字段就不可更改。有final的方法不可以重写,有final的类不可以被继承。

有final的字段,可以在构造方法中初始化final字段。

标签:Java,--,覆写,多态,final,Income,return,方法,public
来源: https://blog.csdn.net/weixin_48067630/article/details/122543788

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有