接口和抽象类 5 大区别
接口和抽象类是Java中两种常用的抽象机制,用于定义类的行为和规范。
它们有以下区别:
1.定义:
接口里都是抽象方法,没有具体的代码实现。因为接口是一组方法的规范。比如我们写的service和mapper层。
抽象类由abstract修饰。抽象类可以有抽象方法,也可以有包含具体方法实现的方法。
2.继承:
一个类能同时实现多个接口,但继承的时候只能继承1个抽象类或普通类。
public class MyClass implements Interface1, Interface2, Interface3 { // 类的实现代码 }
3.实现:
实现接口的类必须实现接口里所有方法,比如serviceImpl实现类。
4.构造方法:
接口本身不具有实例化的能力,因此不需要构造方法。
但是,抽象类有构造方法,可以被其子类调用来初始化子类的实例。
初始化具体是指,当子类实例化时,会首先调用父类的构造方法,以此继承父类的成员变量和方法。其中,子类的构造方法可以通过使用super()语句来显式调用父类的构造方法,或者如果没有指定则隐式地调用父类的默认构造方法。
注释:即使子类不显式调用父类的构造方法,最终都会调用父类的构造方法(除非父类只有有参构造方法,没有无参,而子类没有显式调用父类的构造方法,这个时候就会报错。)。而一旦调用父类的构造方法,就可以完成父类的初始化,同时子类也会继承父类的成员变量和方法。
5.变量:
接口能只能定义静态常量,隐式默认用public static final修饰,不可以用其他词修饰。
抽象类可以定义静态变量、实例变量,或者静态常量。