1. 接口
1.1 定义
接口是一种规范,是对行为的抽象,接口中不包含任何具体实现(Java 8 及更高版本中允许默认方法)
public interface demo {
public static final String field = "sanjin";
public abstract void method();
default void defaultMethod() {
System.out.println("这是一个默认" + field + "实现");
}
}
class implClass implements demo {
@Override
public void method() {
System.out.println("接口方法实现111");
}
}
class run {
public static void main(String[] args) {
implClass implClass = new implClass();
implClass.method();
implClass.defaultMethod();
}
}
-------------------------结果---------------------------
接口方法实现111
这是一个默认sanjin实现
1.2 特点
-
使用
interface关键字 -
方法默认是
public和abstract -
字段默认是
public static final,必须初始化 -
一个类可以实现多个接口(接口之间可以多继承)
-
实现接口时,必须重写接口中定义的所有方法
2. 抽象类
2.1 定义
是一种模板,是一种不能直接实例化的类,用于共享通用的代码实现,同时允许子类提供具体实现,强调“复用”,可以包含抽象方法(没有实现的方法)和具体方法(有实现的方法)
public abstract class demo {
// 字段
private String field1;
private static final String field2 = "sanjin";
// 方法
public void method1() {
System.out.println("模板方法" + field2);
}
// 抽象方法类似接口方法,只能是public abstract修饰
public abstract void method2();
}
class implClass extends demo{
@Override
public void method2() {
System.out.println("模板方法之外的个性化实现");
}
}
class run {
public static void main(String[] args) {
implClass implClass = new implClass();
implClass.method1();
implClass.method2();
}
}
--------------------------结果-------------------------------
模板方法sanjin
模板方法之外的个性化实现
2.2 特点
- 使用
abstract class关键字 - 可以有抽象方法(声明但无实现)和具体方法
- 可以声明普通字段(无修饰符限制),允许初始化或未初始化
- 一个类只能继承一个抽象类(单继承)
- 子类继承抽象类时,必须实现所有抽象方法(子类只需关注差异化实现)
3. 区别
-
字段:接口只能是
public static final,抽象类无所谓 -
方法:接口只能是
public abstract,抽象类只有抽象方法是public abstract或者protected abstract -
接口多实现,抽象类单继承
-
规范和模板的区别