【读书笔记】《java从小白到大牛》抽象类与接口

quange 2022-5-5 121 5/5

设计良好的软件系统应该具备“可复用性”和“可扩展性”,能够满足用户需求的不断变更。使用抽象类和接口是实现“可复用性”和“可扩展性”重要的设计手段。

接口与抽象类一样都不能被实例化

抽象类

Java语言提供了两种类:一种是具体类;另一种是抽象子类。

【读书笔记】《java从小白到大牛》抽象类与接口

在Java中抽象类和抽象方法的修饰符是abstract,声明抽象类Figure

public abstract class Figure {
          // 绘制几何图形方法
    public abstract void onDraw();
}

声明抽象类,在类前面加上abstract修饰符。行声明抽象方法,方法前面的修饰符也是abstract,注意抽象方法中只有方法的声明,没有方法的实现,即没有大括号({})部分。

注意 如果一个方法被声明为抽象的,那么这个类也必须声明为抽象的。而一个抽象类中,可以有0~n个抽象方法,以及0~n具体方法。设计抽象方法目的就是让子类来实现的,否则抽象方法就没有任何意义。

接口

比抽象类更加抽象的是接口,在接口中所有的方法都是抽象的。

提示Java 8之后接口中新增加了默认方法,因此“接口中所有的方法都是抽象的”这个提法在Java8之后是有待商榷。

【读书笔记】《java从小白到大牛》抽象类与接口

接口与多继承

在C++语言中一个类可以继承多个父类,但这会有潜在的风险,如果两个父类有相同的方法,那么子类将继承哪一个父类方法呢?这就是C++多继承所导致的冲突问题。

在Java中只允许继承一个类,但可实现多个接口。通过实现多个接口方式满足多继承的设计需求。如果多个接口中即便有相同方法,它们也都是抽象的,子类实现它们不会有冲突。

接口继承

Java语言中允许接口和接口之间继承。由于接口中的方法都是抽象方法,所以继承之后也不需要做什么,因此接口之间的继承要比类之间的继承简单的多。

归纳抽象类与接口区别如下:

  • 01. 接口支持多继承,而抽象类(包括具体类)只能继承一个父类。
  • 02. 接口中不能有实例成员变量,接口所声明的成员变量全部是静态常量,即便是变量不加publicstatic final修饰符也是静态常量。抽象类与普通类一样各种形式的成员变量都可以声明。
  • 03. 接口中没有包含构造方法,由于没有实例成员变量,也就不需要构造方法了。抽象类中可以有实例成员变量,也需要构造方法。
  • 04. 抽象类中可以声明抽象方法和具体方法。Java 8之前接口中只有抽象方法,而Java 8之后接口中也可以声明具体方法,具体方法通过声明默认方法实现。

在多数情况下接口不能替代抽象类,例如当需要维护一个对象的信息和状态时只能使用抽象类,而接口不行,因为维护一个对象的信息和状态需要存储在实例成员变量中,而接口中不能声明实例成员变量。

- THE END -
最后修改:2022年5月5日
0

版权声明:
一、本站致力于为软件爱好者提供国内外软件开发技术和软件共享,着力为用户提供优资资源。
二、本站提供的所有下载文件均为网络共享资源,请于下载后的24小时内删除。如需体验更多乐趣,还请支持正版。
三、我站提供用户下载的所有内容均转自互联网。如有内容侵犯您的版权或其他利益的,请编辑邮件并加以说明发送到站长邮箱。站长会进行审查之后,情况属实的会在三个工作日内为您删除。

共有 0 条评论