• 抽象类和接口


    目录

    抽象类

    一、概念

    二、定义

    格式

    三、使用

    四、示例

    接口

    一、概念

    二、使用

    抽象类与接口的异同

    如何选择


    抽象类

    一、概念

            通俗来说,一个父类,因为它的某些方面的通性,会被子类继承并重写方法,只要父类的声明的方法有意义,而方法体没有存在的必要,就把这种方法称为抽象方法。

    tips:在java中,如果一个类包含了抽象的方法。那么该类就是一个抽象类

     举个例子,汽车这个名词很广泛,有许许多多不同的汽车,同时这些汽车也可能有共同的特征,那么就将“汽车”定义为抽象类,“汽车”中的方法就可以有“汽车启动”、“汽车鸣笛”、“汽车刹车”等通性方法。

    二、定义

    • 抽象类、抽象方法使用abstract关键字修饰
    • 抽象类:包含抽象方法的类
    • 抽象方法:没有实体的方法

    格式

    修饰符 abstract 返回类型 方法名(参数列表);

    三、使用

    • 想要抽象类被使用,子类必须重写父类所有的抽象方法,或者子类声明为一个抽象类。
    • 抽象类无法创建对象,只能创建非抽象子类的对象。
    • 抽象类不一定有抽象方法,但是有抽象方法一定是抽象类。
    • 抽象类中可以有构造方法,用来给子类创建对象时初始化父类成员使用。

    四、示例

    1. //抽象类
    2. public abstract class Car {
    3. public String name;
    4. /**
    5. * 抽象方法
    6. */
    7. //汽车引擎启动
    8. public abstract void engineStart();
    9. //汽车跑动
    10. public abstract void run();
    11. //汽车关闭引擎
    12. public abstract void engineOff();
    13. /**
    14. * 普通方法
    15. */
    16. //输出汽车名字
    17. public void soutName(){
    18. System.out.println("这是辆汽车,子类汽车名字为" + name);
    19. }
    20. //构造方法
    21. public AbstractTest(String name){
    22. this.name = name;
    23. }
    24. }
    1. public class MyCar extends Car{
    2. public AbstractSon1(String name) {
    3. super(name);
    4. }
    5. @Override
    6. public void engineStart() {
    7. System.out.println("库里南V12发动机启动嗷嗷叫");
    8. }
    9. @Override
    10. public void run() {
    11. System.out.println("库里南跑的賊哇快");
    12. }
    13. @Override
    14. public void engineOff() {
    15. System.out.println("库里南停下了,大伙围观拍照");
    16. }
    17. public static void main(String[] args) {
    18. AbstractSon1 as1 = new AbstractSon1("库里南");
    19. as1.soutName();
    20. as1.engineStart();
    21. as1.run();
    22. as1.engineOff();
    23. }
    24. }

     


    接口

    一、概念

    ​ 接口,是Java语言中一种引用类型,是方法的集合,如果说类的内部封装了成员变量、构造方法和成员方法,那么接口的内部主要是封装的方法,包含了抽象方法(JDK≤1.7),默认方法和静态的方法(JDK1.8),私有方法(JDK1.9)

    通俗来说接口比抽象类还抽象,只能封装方法,对子类的规范性有更好的约束,为了实现多继承,可以使用接口

    二、使用

    • 接口与类为实现关系 -> 类(实现类)实现接口
    • 实现类必须实现(重写)接口的所有方法
    修饰符 interface 接口名称
    1. public interface Car {
    2. //汽车引擎启动
    3. public abstract void engineStart();
    4. //汽车跑动
    5. public abstract void run();
    6. //汽车关闭引擎
    7. public abstract void engineOff();
    8. }
    1. public class CarBehavior implements Car{
    2. @Override
    3. public void engineStart() {
    4. System.out.println("汽车发动引擎");
    5. }
    6. @Override
    7. public void run() {
    8. System.out.println("汽车跑");
    9. }
    10. @Override
    11. public void engineOff() {
    12. System.out.println("汽车关闭引擎");
    13. }
    14. public static void main(String[] args) {
    15. CarBehavior cb = new CarBehavior();
    16. cb.engineStart();
    17. cb.run();
    18. cb.engineOff();
    19. }
    20. }

     


    抽象类与接口的异同

    相同点
    接口抽象类
    都不能被实例化
    接口的实现类或抽象类的子类都只有实现了接口或抽象类中的方法后才能实例化
    不同点
    接口变量必须用final修饰抽象类中可以有定义变量
    接口的所有方法没有方法体抽象类中可以有普通成员方法 
    接口中的方法修饰符号 只能是public抽象类中的抽象方法可以有public,protected,default
    接口中没有构造方法可以有构造方法
    接口可以多个实现类抽象类只能单一继承

    如何选择

    1、当我们需要一组规范的方法的时候,我们就可以用接口,在具体的业务中,来对接口进行实现,能达到以不变应对万变,多变的需求的情况我们只需要改变对应的实现类 。
    2、如果多个实现类中有者相同可以复用的代码 这个时候就可以在实现类和接口之间,添加一个抽象类,把公共的代码抽出在抽象类中。然后要求不同实现过程的 子类可以重写抽象类中的方法,来完成各自的业务。

  • 相关阅读:
    前端进击笔记第十七节 提升开发效率:数据抽象与配置化
    学习Java的第二十三天。。。(集合)
    02.Vue2.x Vue模版语法
    拍照扫描怎么弄?你可以试一下这两个方法
    软考C++基础知识
    opencv中的图像操作
    【Spring 学习系列】Bean 的生命周期之初始化与销毁
    【课程作业】西瓜书 机器学习课后习题 : 第一章
    Verilog HDL 语法入门教程
    【算法 | 模拟No.5】leetcode 74. 搜索二维矩阵
  • 原文地址:https://blog.csdn.net/qq_57031340/article/details/126694809