接口和抽象类 5 大区别

接口和抽象类是Java中两种常用的抽象机制,用于定义类的行为和规范。

它们有以下区别:

1.定义:

接口里都是抽象方法,没有具体的代码实现。因为接口是一组方法的规范。比如我们写的service和mapper层。

抽象类由abstract修饰。抽象类可以有抽象方法,也可以有包含具体方法实现的方法。

2.继承:

一个类能同时实现多个接口,但继承的时候只能继承1个抽象类或普通类。

public class MyClass implements Interface1, Interface2, Interface3 {
    // 类的实现代码
}

3.实现:

实现接口的类必须实现接口里所有方法,比如serviceImpl实现类。

4.构造方法:

接口本身不具有实例化的能力,因此不需要构造方法。

但是,抽象类有构造方法,可以被其子类调用来初始化子类的实例。

初始化具体是指,当子类实例化时,会首先调用父类的构造方法,以此继承父类的成员变量和方法。其中,子类的构造方法可以通过使用super()语句来显式调用父类的构造方法,或者如果没有指定则隐式地调用父类的默认构造方法。

注释:即使子类不显式调用父类的构造方法,最终都会调用父类的构造方法(除非父类只有有参构造方法,没有无参,而子类没有显式调用父类的构造方法,这个时候就会报错。)。而一旦调用父类的构造方法,就可以完成父类的初始化,同时子类也会继承父类的成员变量和方法。

5.变量:

接口能只能定义静态常量,隐式默认用public static final修饰,不可以用其他词修饰。

抽象类可以定义静态变量、实例变量,或者静态常量。

经验分享 程序员 微信小程序 职场和发展