[进阶]Java:抽象类:概述、案例、特点

 抽象类:

  • 在Java中abstract是抽象的意思,可以修饰类、成员方法。
  • abstract修饰类,这个类就是抽象类;修饰方法,这个方法就是抽象方法。

注意事项:

  • 抽象方法只有方法签名,不能声明方法体。
  • 一个类中如果定义了抽象方法,这个类必须声明成抽象类,否则报错。

代码演示如下:

动物类(父类):

public abstract class Animal {
    /**
       抽象方法:有abstract修饰 不能写方法体代码
     */
    public abstract void run();
}

狗狗类(子类):

public class Dog extends Animal {
    @Override
    public void run() {
        System.out.println("狗狗跑的贼快~~");
    }
}

测试类:

public class Test {
    public static void main(String[] args) {
        //目标:先认识抽象类,再了解它的使用场景。
        Dog d = new Dog();
        d.run();
    }
}

抽象的使用场景:

  • 抽象类可以理解成不完整的设计图,一般作为父类,让子类来继承。
  • 当父类知道子类一定要完成某些行为,但是每个子类该行为的实现又不同,于是该父类就把该行为定义成抽象方法的形式,具体实现交给子类去完成。此时这个类就可以声明成抽象类。

案例

 代码演示 如下:

卡的抽象类(父类):

public abstract class Card {
    private String userName;
    private double money;

    /**
       定义一个方法:表示卡片可以支付。
       抽象方法
     */
    public abstract void pay(double money);

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public double getMoney() {
        return money;
    }

    public void setMoney(double money) {
        this.money = money;
    }
}

金卡(子类):

public class GoldCard extends Card{
    @Override
    public void pay(double money2) {
        System.out.println("您当前的消费是:" + money2);
        System.out.println("您卡片当前余额是:" + getMoney());

        //优惠价:
        double rs = money2 * 0.8;
        System.out.println(getUserName() + "您实际支付:" + rs);

        //更新账户余额
        setMoney(getMoney() - rs);
    }
}

测试类:

public class Test {
    public static void main(String[] args) {
        //目标:学习抽象类的基本使用:做父类,被继承,重写抽象方法
        GoldCard c = new GoldCard();
        c.setMoney(10000);
        c.setUserName("鸟儿");

        c.pay(300);
        System.out.println("剩余:" + c.getMoney());
    }
}

抽象类的特征和注意事项:

  • 类有的成员(成员变量、方法、构造器)抽象类都具备
  • 抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
  • 一个类继承了抽象类必须重写完抽象类的全部抽象方法,否则这个类也必须定义成抽象类
  • 不能用abstract修饰变量、代码块、构造器
  • 最重要的特征:得到了抽象方法,失去了创建对象的能力(有得有失)

final和abstract是什么关系?

  • 互斥关系
  • final修饰类,类不能被继承。abstract修饰类,是抽象类,必须要被继承,否则就没有意义
  • final修饰方法,方法不能被重写,abstract修饰方法,方法必须要被重写。所以两者是互斥关系。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值