1:理解接口
接口是一种规范,跟抽象类不同
接口定义了一批需要实现的方法,只是提供方法,不提供实现, 将规范与方法分离
抽象类体现的是一种模板式设计
2:接口(Java9)
interface
修饰符 interface 接口名 extends 父接口1,父2
修饰符可用public 默认包访问权限、
可继承多个父接口,,接口只能继承接口不可以继承类 说明实际上java是支持多继承的,只不过类单继承、接口多继承
接口中的成员:
成员变量:只能静态
方法:只能抽象实例方法、类方法、默认方法、私有方法
内部类、内部枚举
不能有构造函数、代码块
接口内成员权限:
只能是public
静态常量: public static final 默认的修饰
变量初始化可以构造器、初始代码块、声明时,而接口没有构造器、初始代码块,所以接口只能在声明时指定默认值
方法: abstract 默认的
普通方法: public abstract
普通方法不可以有方法体,
但是类方法、默认方法、私有方法 必须要有方法体
提供了默认方法,默认方法中抽离的公共方法就需要抽离出来,就是私有方法,只能本类作为工具方法使用
private 方法不能使用 default 修饰
private 方法可以使用 static 修饰,即为类方法,又为实体方法
接
default 方法不能和 static 修饰
接口中的内部类、私有方法、内部枚举默认都是 public static
例子:
public interface Test{
default void method1(){sop(1);}
private void method1(){sop(1);}
static void method1(){sop(1);}
private static void method1(){sop(1);}
}
3:接口用途
1) 定义变量,也可以用于强制类型转换
声明一个引用对象时,这个引用类型必须为接口的实现类对象 Test p = new Student(); 这里Student必须实现了Test接口
2) 调用接口中的静态常量
3) 被其他类实现
实现方法必须为 public 接口中权限为public,子类或实现类的权限只能更大或相等
4:接口和抽象类的差异
1)相同点
<1> 都不能实例化
<2> 都可以包含抽象方法
2)不同点
两者区别很大,主要体现在设计目的上
设计目的方面:
(1)接口作为一种规范,规定了对外提供什么服务
一个程序间使用接口,接口是多模块间耦合标准
多个程序间之间使用接口,接口是通信标准
接口类似整个系统的大纲,制定了各模块间的标准,因此接口通常不能轻易改变
(2)抽象类则是模板式设计,抽象类可以说是系统的中间产品,需要进一步完善才可以作为最终产品
用法上的区别:
(1)接口中只能定义默认方法、静态方法、私有方法、抽象实例方法,不能给普通方法提供实现
抽象类可以有普通方法,具有方法体
(2)接口中只可以定义静态常量,不能定义普通成员变量
抽象类既可以定义静态常量,又可以定义普通成员变量
(3)接口不能有构造器
抽象类可以有构造器,作为子类调用初始化使用,而非创建对象使用
(4)接口不能包含初始化块
抽象类可以包含初始化块
(5)抽象类只能被类单继承
接口可以被类多实现,接口之间还可以多继承