抽象类——加油站加油

抽象类:

格式: 修饰符 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 {
@Override
public  void pay(double money){
    //优惠后的金额算出来
    double rs = money * 0.8;
    double lastMoney = getMoney() - rs;
    System.out.println(getName() + "当前账户金额" + getMoney() + ",当前消费了" + rs + ",消费后的金额剩余" + lastMoney);
    setMoney(lastMoney);//更新账户对象余额
}
}

银卡(其实就是把金卡的打折改一改,加一下限制就行了,我就不整了,下面给大家一个面试重要考点补过来)抽象类——加油站加油_第1张图片

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

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

你可能感兴趣的:(java初学者,objective-c,java,开发语言)