java抽象类与接口

抽象方法本质上是定义接口规范,从而保证所有子类都有相同的接口实现,从而使多态发挥出威力。Java的接口特指interface的定义,表示一个接口类型和一组方法签名,而编程接口泛指接口规范,如方法签名,数据格式,网络协议等。

如果一个抽象类没有字段,方法全是抽象方法,就可以将该抽象类改写成接口:interface

例如,抽象类:

abstract class Person {
    public abstract void run();
    public abstract String getName();
}

改写成接口interface:

interface Person {
    void run();
    String getName();
}

接口没有字段,接口的定义方法默认都是public abstract,所以这两个修饰符不需要写出来。

当一个class去实现interface时,需要使用implements关键字。

class Student implements Person {
    private String name;

    public Student(String name) {
        this.name = name;
    }

    @Override
    public void run() {
        System.out.println(this.name + " run");
    }

    @Override
    public String getName() {
        return this.name;
    }
}

一个类可以实现多个interface(不同于一个类只能继承自另一个类)。

一个interface可以继承自另一个interfaceinterface继承自interface使用extends,它相当于扩展了接口的方法。

在接口中,可以定义default方法。实现类可以不必覆写default方法。default方法的目的是,当我们需要给接口新增一个方法时,会涉及到修改全部子类。如果新增的是default方法,那么子类就不必全部修改,只需要在需要覆写的地方去覆写新增方法。default方法无法访问实例字段,而抽象类的普通方法可以访问实例字段。

interface是可以有静态字段的,并且静态字段必须为final类型.

练习:给一个有工资和稿费的小伙伴算税,工资中超过5000不超过10000的部分税率为0.1,超过10000的部分税率为0.2;稿费的税率是0.2.

public class demo1 {
    public static void main(String[] args) {
        Income [] incomes=new Income[]{
                new Salary(7000),
                new Royalty(3000)
        };
        System.out.println(totaltax(incomes));
    }
    public static double totaltax(Income []incomes){
        double totaltax=0;
        for(Income income:incomes){
            totaltax+=income.gettax();
        }
        return totaltax;
    }
}
//定义抽象类
interface Income{
    double gettax();

}
//工资
class Salary implements Income{
    private double income1;
    public Salary(double income1){
        this.income1=income1;
    }
    public double gettax(){
        if(income1<=5000)
            return 0;
        else if(income1>5000 && income1<=10000){
            return (this.income1-5000)*0.1;
        }
        else {
            return (this.income1-10000)*0.2+5000*0.1;
        }
    }
}
//稿费
class Royalty implements Income{
    private double income2;
    public Royalty(double income2){
        this.income2=income2;
    }
    public double gettax(){
        return income2*0.2;
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值