抽象类与接口

抽象类

  • abstract修饰符,修饰类,该类就是抽象类;修饰方法,该方法就是抽象方法;

    格式:遵循普通格式,但修饰符必须有abstract;

  • 抽象方法,只有方法的声明,没有方法的实现(方法体),依靠子类来实现,没有{},以;结尾;

  • 子类继承抽象类,就必须要全部实现抽象类没有实现的抽象方法,否则该子类也必须是抽象类;

  • 抽象类的使用注意点:

    ①抽象类单独存在没有任何价值,一般被设计成一个父类使用;

    ②抽象类如果不定义抽象方法,那么该方法就是让它的子类来使用的;

    ③一个方法如果没有方法体,那必须使用abstract关键字修饰;

  • abstract不可与private(私有的,不可继承)、final(最终的、没有子类)、static(静态的,类中默认执行,而抽象类必须子类继承执行,矛盾)


  1. 抽象类不能new,它是让子类继承的,只能依靠子类去实现:约束

  2. 抽象类可以具有类的所有特征(包括属性、方法、构造等),

  3. 抽象方法只能在抽象类或者接口中,抽象类中可有可无抽象方法、普通方法,但抽象类中一般都存在抽象方法。

接口

  • 为了弥补java单继承的缺陷,通过接口进行多实现;接口是抽象方法的集合

  • 普通类:只有具体实现;
  • 抽象类:具体实现和规范(抽象方法)都有;
  • 接口:只有规范,起约束作用; ①本质也是一种类; ②一般定义抽象方法,不能定义普通方法、成员变量; ③实现的关系本质上是一种继承关系; ④接口没有构造方法,它的实现类不能使用super关键字来调用接口中的信息 ⑤一个实现类可以同时实现多个接口类,一个接口类也可以同时继承多个接口

声明类的关键字是class,声明接口的关键字是interface

  • 接口的实现:类名 implements 接口名{}

    • 实现接口,必须将接口内的抽象方法全部重写,否则该类需定义为抽象类;

    • 实现,将基于接口的类实例化;

    • 一个类可以同时继承+实现,先继承后实现;类名 extends 父类 implements 接口;

  • 当接口内部,有且仅有一个需要实现的方法,使用A a = ->{ 重写的方法};


  • 接口的作用:

    • 提高程序的重用性

    • 提高程序的可扩展性

    • 降低程序的耦合度

    • 实现了多继承

    • 增加安全性

  • 接口与类相似点:

    • 一个接口可以有多个方法,

    • 接口文件保存在.java结尾 的文件中,文件名使用接口名。

    • 接口的字节码文件保存在.class结尾的文件中。

    • 接口相应的字节码文件必须在与包名称相匹配的目录结构中。

  • 接口与类的区别:

    • 接口不能实例化对象

    • 接口没有构造方法

    • 接口所有的方法只能是抽象方法,必须public abstract修饰,(默认public abstract修饰,一般不再写) jdk1.8之后,内部可以有默认方法(显式的用default修饰,借用实现类的对象调用)、静态方法(static,借助 接口名.方法名 调用)

    • 接口不能包含成员变量,默认都是静态常量(默认public static final修饰);

    • 接口不是被继承,而是要被实现

    • 接口不能实现接口,但接口支持多继承接口;接口 extends 接口1,接口2,·······{}

  • 接口与抽象类的区别

    • 抽象类中的方法可以有方法体,能实现方法的具体功能,但接口中的方法不行;

    • 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final 类型的;

    • 接口中不能含有静态代码块而抽象类是可以有静态代码块;

    • 一个类只能继承一个抽象类,但可以实现多个接口;

posted @ 2022-08-04 21:17  大嘟肚  阅读(35)  评论(0)    收藏  举报