抽象类与接口(学习笔记)

抽象类

  1. 什么是抽象类:
    类和类之间具有共同特征,讲这些共同特征抽取出来,就形成了抽象类。因为类本身是不存在的,所以抽象类无法创建对象(无法实例化)。
    以下借用视频中总结的思维层次图:
    类与抽象类
  2. 抽象类属于什么类型:
    抽象类也属于引用数据类型,跟普通的类一样。
  3. 如何定义一个抽象类:
    语法:
[修饰符列表] abstract class 类名{
	类体;
}

在这里插入图片描述

  1. 抽象类是无法实例化的,天生是用来被继承的,天生当爹。
    但是抽象类的子类也可以是抽象类。

  2. 因为抽象类是天生就用来被继承的,而final修饰的类是无法被继承的,所以final和abstract无法联合使用。在这里插入图片描述

  3. 抽象类是有构造方法的。
    子类继承了抽象类之后,子类创建对象时,构造方法会调用super(); 调用父类的构造方法,如果父类没有构造方法,则会编译报错。所以抽象类的构造方法是供子类创建对象用的。在这里插入图片描述

  4. 抽象方法:
    7.1 没有方法体,以分号结尾。
    7.2 修饰符列表中有abstract关键字。
    在这里插入图片描述
    抽象类中不一定有抽象方法,抽象类中可以有非抽象方法,但是抽象方法只能存在于抽象类中。

  5. 非抽象子类继承抽象类必须将抽象方法实现(重写)。
    这是面向抽象编程,可以降低程序的耦合度,提高程序扩展力,这种编程思想符合OCP原则。
    在这里插入图片描述

问:Java语言中,凡是没有方法体的方法都是抽象方法吗?
答:不是,在源码中有native,底层是C++的代码,也没有方法体。

接口

  1. 接口是完全抽象的(抽象类是版抽象的),也可以说接口是特殊的抽象类。接口也是一种引用数据类型,编译后也是一个class字节码文件。
  2. 定义接口的语法:
[修饰符列表] interface 接口名{
}
  1. 接口支持多继承,一个接口可以继承多个接口。在这里插入图片描述
  2. 接口中只包含常量和抽象方法。接口中所有元素都是public 修饰的(都是公开的),所以接口中的抽象方法定义是public abstract 修饰符可以省略。常量的 public static final 也可以省略。在这里插入图片描述
  3. 类和类之间叫继承,类和接口之间叫实现,其实和继承一样。继承用extends关键字,而实现用implements关键字。
    当非抽象类实现接口的时候,必须将接口汇总的 方法全部实现(重写)。
    一个类可以同时实现多个接口,这个机制弥补了单继承。
  4. 接口和接口之间在进行强制类型转换时,没有继承关系,也可以强转。但是运行的时候可能也会出现ClassCastException,所以最好用instanceof 语句判断。
    在这里插入图片描述
    个人理解是这样的,因为C实现了A和B,所以A可以向下转型成C,然后再向上转型成B,所以A和B之间是可以互相转换的。纯属个人理解。

7.当一个类既继承了一个类,又实现了一个接口时,语法格式是:

[修饰符列表] class 类名 extends 类名 implements 接口名{

}

在这里插入图片描述

接口在开发中的作用

类似多态在开发中的作用,面向接口编程就是面向抽象编程,降低了程序的耦合度,提高了程序的扩展里。是程序变的可插拔,如主板,内存条等,都是以接口的形式存在于电脑中。

例子:厨师 菜单 顾客
厨师是实现类,顾客是调用类,菜单就是接口。把厨师跟顾客解耦了。

发布了3 篇原创文章 · 获赞 11 · 访问量 364

猜你喜欢

转载自blog.csdn.net/ssH18868325485/article/details/105305755