【JavaSE】abstract 抽象类 快到碗里来 (◕ᴗ◕✿)

啥是抽象类?抽象类是用来干嘛的?

上层简单总结

所谓抽象类,就是把一些事物的共性总结起来,封装在一个抽象类当中从而形成一个模板,供子类进行继承并实现。子类总体上会保留抽象类的行为方式,并且在父类的基础上进行拓展,改造。

处出于感情的自然流露,大家一定会问:那抽象类和普通的可以被继承的类有啥区别?他们不都是模板吗?既然已经可以继承父类了,那为什么还必须要有抽象类?

其实可以这样理解,java提供抽象类这样一种设计思想,至于使用还是不使用这个设计机制,完全在于编程人员的选择。

那抽象类能解决什么问题?

  • 当功能内部的一部分是确定的,而另一部分是不确定的,这个时候可以把不确定的部分暴露出去,让子类去实现
  • 编写一个抽象父类,父类提供了多个子类的通用方法,并把一个或多个留给其子类实现,就是一种模板模式

快速入门

  • 用abstract关键字来修饰一个类时,这个类就是一个抽象类
  • 用abstract关键字来修饰一个方法时,这个方法就是一个抽象方法
  • abstract关键字只能用来修饰类和方法,并且一个类中只要有一个方法被声明为抽象方法,则这个类也必须被修饰为抽象方法

代码示例如下:

/**
@author Liu Xianmeng
@createTime 2022/11/22 14:32
@instruction 定义一个抽象类用于演示抽象类的定义
*/
@SuppressWarnings({"all"})
public abstract class AbstractClass {
    int val_1; // 一个抽象类的变量
    // 抽象类的抽象方法用于子类进行自由拓展
    public abstract int play();
    // 抽象类也可以有非抽象的方法 子类可以直接继承
    public void dancing(){
        System.out.println("C AbstractClass M dancing()...");
    }
}

如何使用抽象类

前面说过,抽象类是一个模板,因此只能被子类继承而不能直接实例化

/**
@author Liu Xianmeng
@createTime 2022/11/22 14:37
@instruction 使用这个类继承上一个定义的抽象类
*/

@SuppressWarnings({"all"})
public class ImplAbs extends AbstractClass {
    // 重写构造方法
    public ImplAbs(int val_1){
        this.val_1 = val_1;
    }
    @Override // 重写抽象类的方法
    public int play() {
        return this.val_1;
    }
    public static void main(String[] args) {
        ImplAbs implAbs = new ImplAbs(100);
        implAbs.play();
        implAbs.dancing();
    }
}

使用抽象类注意事项

  • 抽象类不能被实例化(因为它的作用就是定义一个类模板)
  • 抽象类可以没有abstract修饰的方法
  • 抽象方法不能用private、final、static修饰,因为这些关键字都是和重写相违背的
  • 一旦一个类包含了被abstract修饰的方法,那么这个类必须声明为abstract的抽象类
  • abstract只能修饰类和方法而不能修饰属性
  • 抽象类可以有任意成员(他本质还是类),如非抽象方法、构造器、静态属性等等
  • 抽象方法不能有方法体
  • 如果一个类继承了抽象类,那么他必须实现抽象类的所有抽象方法,除非它自己也声明为abstract类

感谢读取 ~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值