美文网首页
28、接口

28、接口

作者: 爱学习的代代 | 来源:发表于2021-04-12 23:25 被阅读0次

场景①:商品中有些商品比如大米,酱油等是有保质期的(有些商品没有保质期,比如杯子,碗等),那么我们需要一些商品继承保质期相关的属性和方法。

场景②、商品中有些商品是有虚拟的,比如你买了话费充值卡、购物卡(仅支持在华联超市消费)等,那么我们定义的类也需要继承虚拟商品特有的一些属性等。

据我们了解Java是不支持多继承的。那么怎么办呢?

有时候必须从几个类中派生出一个子类,继承它们的所有属性和方法。但是Java不支持多重继承。有了接口,就可以得到多重继承的效果。

一、接口是什么?

接口是抽象方法和常量值定义的集合

说明:从本质上讲接口是一个特殊的抽象类,这种抽象类中仅定义常量和方法,而不关心变量和方法的实现。

二、定义及使用
package day15;
import java.util.Date;

public interface ExpireDateMerchandise {
// 接口使用interface关键词声明

// 接口中的方法,就是这个类型的规范,接口专注于规范,怎么实现这些规范,它不管。

// 接口无法被实例化

    /**
     *
     * @param days 截止到当前,保质期超出这么多天。
     * @return 截止到当前,true表示保质期剩余天数大于参数,false表示保质期没有那么长了。
     */
//  接口里的方法都是通过 public abstract修饰的,方法有名字,参数和返回值。没有方法体,以;号结束。
    boolean notExpireInDays(int days);

    /**
     *
     * @return 商品生产日期
     */
    Date getProduceDate();

    /**
     *
     * @return 商品到期日期
     */
    Date getExpireDate();

    /**
     *
     * @return  截止到当前,剩余保质期还剩下总保质期长度的百分比
     */
    double leftDatePercentage();

    /**
     * 根据剩余的有效百分比,得出商品现在实际的价值
     * @param leftDatePercentage  剩余有效期百分比
     * @return
     */
    double actualValueNow(double leftDatePercentage);

}

说明:

  1. 使用interface关键词声明接口
  2. 接口中的方法,就是这个类型的规范,接口只定义规范,怎么实现由具体的类来实现。
  3. 接口中的方法要写好注释
  4. 接口无法被实例化
  5. 一个类实现接口 通过implements 接口1, 接口2 声明
  6. 具体的类中要实现接口中定义的方法
package day15;


import java.util.Date;

//一个类只能继承一个类,但是可以实现多个接口
public class GamePointCard extends MerchandiseV2 implements ExpireDateMerchandise, VirtualMerchandise {

    private Date produceDate;
    private Date expirationDate;

    public GamePointCard(int id,  String name, int count, double soldPrice, double purchasePrice, Date produceDate, Date expirationDate) {
        super(id, name, count, soldPrice, purchasePrice);
        this.expirationDate = expirationDate;
        this.produceDate = produceDate;
    }

    public boolean notExpireInDays(int days) {
        return daysBeforeExpire() > days;
    }

    public Date getProduceDate() {
        return produceDate;
    }

    public Date getExpireDate() {
        return expirationDate;
    }

    public double leftDatePercentage() {
        return 1.0 * daysBeforeExpire() / (daysAfterProduce() + daysBeforeExpire());
    }

    public double actualValueNow(double leftDatePercentage) {
        return soldPrice;
    }

    private long daysBeforeExpire() {
        long expireMS = expirationDate.getTime();
        long left = expireMS - System.currentTimeMillis();
//      过期了
        if (left < 0) {
            return -1;
        }
        return left / (24 * 3600 * 1000);
    }

    private long daysAfterProduce(){
        long produceMS = produceDate.getTime();
        long left = System.currentTimeMillis() - produceMS;
        if (left < 0) {
            return -1;
        }

        return left / (24 * 3600 * 1000);
    }



}

相关文章

  • 28、接口

    场景①:商品中有些商品比如大米,酱油等是有保质期的(有些商品没有保质期,比如杯子,碗等),那么我们需要一些商品继承...

  • Activiti6简明教程

    一、为什么选择Activiti 二、核心7大接口、28张表 (一)7大接口 RepositoryService:提...

  • Activiti6简明教程

    一、为什么选择Activiti 二、核心7大接口、28张表 (一)7大接口 RepositoryService:提...

  • JDK8新特性

    2020-02-28 link 接口 Optional java.util.stream functionInte...

  • Java - Lambda 表达式与 Stream 接口

    Java - Lambda 表达式与 Stream 接口 sschrodinger 2019/10/28 引用 j...

  • 28. 多态

    28. 多态 Go 通过[接口]来实现多态。我们已经讨论过,在 Go 语言中,我们是隐式地实现接口。一个类型如果定...

  • Jetson Nano硬件接口

    J25: 5V-4A外接电源接口,最大电流为4.4A,使用2.1x5.5x9.5插头J28:USB2.0供电接口 ...

  • HashMap分析

    分析源码:android-28 Map:接口 HashMap是个散列链表。 put方法实现 HashMap在put...

  • 代码常见小问题总结

    代码常见小问题总结 涉及资金时的防刷、限量、防重(28)长链路防重:一个接口涉及到多个支付接口;根据统一的商户订单...

  • Java教程 第28章 接口

    接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interfac...

网友评论

      本文标题:28、接口

      本文链接:https://www.haomeiwen.com/subject/fkcflltx.html