1、接口的定义
接口 (interface)是抽象方法和常量值的定义的集合。 从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。
例如:
interface Person {
void run();
}
在抽象类中,抽象方法本质上是定义行为规范:规定父类中的抽象行为(抽象方法),要求所有子类必须对该抽象方法进行实现。从而,实现对子类行为的规范的约束。主要用于实现多态。所谓 interface 接口,就是比抽象类还要更佳抽象的一种纯抽象的代码结构。因为它连字段(成员变量)都不能存在,只能包含常量、抽象方法、默认方法等。另外,接口定义的所有方法默认都是 public abstract 的,所以这两个修饰符不需要显示的定义出来(写或不写效果都样)
2、接口的继承
在Java中一个子类只被允许继承一个父类,即只允许单继承。但一个类可以实现多个接口,通过实现多个接口的方式满足多继承的设计需求。如果多个接口中有相同的方法,由于它们都是抽象的,子类实现它们不会有冲突。
一个interface可以继承自另一个interface。interface继承interface同样也使用extends关键字,它相当于扩展了接口的方法。
3、抽象类和接口的区别
(1)接口:
- 语法1:接口使用interface关键字定义
- 语法2:接口中允许定义抽象方法,定义时允许省略abstract
- 语法3:接口中不允许定义构造方法
- 语法4:接口中不允许定义带有方法体的普通方法,但可以通过default关键字定义默认方法
- 语法5:实现类通过implements关键字实现接口,必须重写接口中定义的抽象方法
- 语法6:实现类可以同时实现多个接口
- 语法7:接口之间允许多重继承
(2)抽象类:
- 语法1:抽象类使用abstract关键字定义
- 语法2:抽象类中允许定义抽象方法
- 语法3:抽象类中允许定义构造方法
- 语法4:抽象类允许定义带有方法体的普通方法
- 语法5:子类通过extends关键字继承抽象类,必须重写抽象类中定义的抽象方法
- 语法6:子类同时只能继承一个父类
接口是对行为的抽象,它是抽象方法的集合,利用接口可以达到行为定义和业务实现分离的架构设计目的,并且接口的多重实现以及多重继承等特性,在架构设计上更灵活,易扩展。
抽象类大多用于抽取相关子类的共用行为方法实现或者是共同成员变量,然后通过继承的方式达到代码复用的目的。同时,抽象类中的抽象方法还可以 用于约束子类对于某种行为必须进行实现。例如: java 的核心类库中,很多子 类的通用部分就被抽取成为抽象类。比如集合框架中的java.util.AbstractList字符串的 java.lang.AbstractStringBuilder等;
4、代码例
package com.ret.demo9;
import javax.swing.event.AncestorListener;
public interface MyInterface {
/*
* 语法1:使用interface关键字定义 语法2:接口中,允许定义“抽象方法”,public和abstract关键字可以省略
* 语法3:接口中,允许定义“默认方法” 语法4:实现类通过implements关键字实现接口,可以同时实现多个接口
*/
// 允许定义“抽象方法”
void abstDosth();
public abstract void abstDowork();
// 允许定义“默认方法”
public default void dolist() {
}
// 不允许定义构造方法
// public MyInterface(){}
// 不允许定义“普通方法”
// public void dolist(){/*...*/}
}
//Ext类通过implements关键字实现MyInterface接口
class Ext implements MyInterface,anthorInterface {
@Override
public void abstDosth() {
// TODO Auto-generated method stub
}
@Override
public void abstDowork() {
// TODO Auto-generated method stub
}
}
5、小结
- Java 的接口( interface )用于定义纯粹的抽象行为(方法)规范。
- 一个类只能 extends 继承自另一个类(单继承)。但是,一个类可以 implements 实现多个 interface 接囗(多重实现)。
- 一个 interface 可以继承自多个 interface (接口之间允许多重继承)。
- 一个类实现 interface 接口时,要求必须实现该接口中所有的抽象方法。
- 接口也是一种“高层”的数据类型,可以用于定义“引用”的类型,也适用于"向上转型"和”向下转型"。
- 接口不允许实例化。
- 接口的所有方法都是抽象方法,接口不能定义实例字段(成员变量)。
- 接口可以定义 default方法(JDK 版本>= 1.8),default 方法可以包含方法体。
- 实现 Comparable 接口的类,该类的对象之间可以进行“比较”,用于“排序”