如何产生的
在抽象类的基础之上又做了进一步的规定。
我们知道抽象类中可以有普通方法和抽象方法,那么如果一个抽象类中只有抽象方法和常量,则可以定义为接口。
接口是特殊的抽象类。
定义接口
interface 接口名 {
常量;
抽象方法;
}
接口中默认定义的都是常量,也就是
public static final int x = 5;
同
int x = 5;
接口中默认定义的方法都是抽象方法,
public abstract a ();
同
a ();
接口中没有构造方法,不能实例化方法。
实现接口
实现接口的类称为实现类,实现类必须实现接口中所有方法,切必须用public 修饰
class 类名 implements 接口名 {
}
特性
- 一个类可以实现多个接口,多个接口逗号隔开
- jdk8以上:修饰接口中的方法增加 default,可以有方法体,实现类不强制实现此方法。
interface 接口名 {
public default f () {
}
}
出现这个的原因?
比如定义一个接口里面有好多方法,如果我们的实现类只想实现其中一种方法,那么也得写上其他没有用到的方法,这样不太友好。所以增加了这个,
继承
一个接口能继承另一个接口,和类之间的继承方式比较相似。
// 文件名: Sports.java
public interface Sports
{
public void setHomeTeam(String name);
public void setVisitingTeam(String name);
}
// 文件名: Football.java
public interface Football extends Sports
{
public void homeTeamScored(int points);
public void visitingTeamScored(int points);
public void endOfQuarter(int quarter);
}
多继承:
在Java中,类的多继承是不合法,但接口允许多继承。
public interface Hockey extends Sports, Event
作用
- 间接的实现了多继承(java类不支持多继承)
- 通过接口定义规范和标准
- 将标准的制定和实现分开
建议面向接口编程,提高扩展性
接口和抽象类的比较
相同点:
扫描二维码关注公众号,回复:
12788037 查看本文章
- 都不能实例化
- 都可以包含抽象方法
不同点:
- 接口中只有静态常量,抽象类中可以有普通成员变量。
- 接口中只有抽象方法,抽象类中可以有非抽象方法(使用
default
修饰) - 接口中不包含构造方法,抽象类中可以有构造方法
- 接口中支持多继承,抽象类不支持多继承