写点什么

抽象类——加油站加油

作者:Geek_10c5db
  • 2022 年 5 月 02 日
  • 本文字数:1163 字

    阅读完需:约 4 分钟

抽象类:

格式: 修饰符 abstract class 类名

抽象方法:抽象类中定义的子类必须完成功能的功能的基本需求

格式: 修饰符 abstract 返回值类型 方法名称(形参列表)

抽象类是用来被继承的,抽象方法是交给子类重写实现的。

一个类如果继承了抽象类,那么这个类必须重写完抽象类的全部抽象方法,否则这个类也必须定义成抽象类。(用我通俗的理解就是。一般父类是抽象类的话,他所定义的那些抽象方法,你这个子子类也要用到这些方法)。

抽象的特点:有得有失( 不能创建对象)

(留一个枚举的格式吧,以防用到:

       修饰符  enum   枚举名称{         第一行都是罗列枚举类实例的名称(建议全部字母大写)}
复制代码

都是最终类,不可以被继承,相当于多例模式)

举个抽象类的案例:

做一个系统:一个加油站推出两种卡,一种是预存 10000 元的金卡,后续加油享受 8 折优惠,另一种是预存 5000 元的银卡,后续加油享受 8.5 折优惠。请分别是两种卡片进入收银系统后的逻辑,卡片需要包含主人的名称、余额、支付功能。

个人分析:从中可以看出金卡,银卡都包含名称、余额。然而支付功能因为金卡,银卡是不同的优惠,因此可以定义一个父类,包含这两个所共有的(金额,名称),支付功能可以在子类的每个方法中分别定义。

父类 card

package com.itheima.demo1; public abstract class card {    private String name;//主人名称    private double money;     /**     * 子类是一定要支付的,但是每个子类支付的情况不一样,所以父类把子类定义为抽象类     *     * @return     */     public abstract void pay(double money);      public String getName() {        return name;    }     public void setName(String name) {        this.name = name;    }     public double getMoney() {        return money;    }     public void setMoney(double money) {        this.money = money;    }}
复制代码

金卡子类 GoldCard

package com.itheima.demo1;         //金卡 public class GoldCard extends card {@Overridepublic  void pay(double money){    //优惠后的金额算出来    double rs = money * 0.8;    double lastMoney = getMoney() - rs;    System.out.println(getName() + "当前账户金额" + getMoney() + ",当前消费了" + rs + ",消费后的金额剩余" + lastMoney);    setMoney(lastMoney);//更新账户对象余额}}
复制代码

银卡(其实就是把金卡的打折改一改,加一下限制就行了,我就不整了,下面给大家一个面试重要考点补过来)


面试考点:final 与  abstract 是什么关系?  互斥

(解释一下:final 是最终方法,不能被重写,不能被继承,然而 abstract 很希望自己可以被继承,因为他那个抽象类方法只有子类征用了,定义这个抽象类才有意义,个人理解,用大白话给大家都说,错误可以指正)

发布于: 刚刚阅读数: 3
用户头像

Geek_10c5db

关注

还未添加个人签名 2022.04.22 加入

授人以鱼不如授人以渔

评论

发布
暂无评论
抽象类——加油站加油_Geek_10c5db_InfoQ写作社区