Java 语言中的接口
接口的概念
- 接口可以理解为一种特殊的类,由全局常量和公共抽象方法组成;
- 通俗理解: 类是一种具体的实现体,而接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部数据,也不关心这些类里方法的实现细节,接口之规定这些类实现它的类里必须提供某些方法;
- 也就是说,接口其实是一种规范,是用来约束类的。
接口定义
[修饰符] interface 接口名 [extends 父接口1,父接口2...]{
零到多个**常量**...
零到多个抽象**方法**....
}
- 常量:
- 接口中属性是常量,即使我们程序员自己定义时不显示的添加 final修饰符,编译器也会自自动添加;
- 方法:
- 同上,接口中的方法也只能是抽象方法,即使我们通常不添加 abstract 修饰符,编译器也会自动添加;
使用接口
- 一个类是可以实现一个或者多个接口的,实现接口使用
implements
关键字。 Java中一个类只能继承一个父类,是不够灵活的,Java通过实现多个接口来解决这个问题;
继承父类并实现接口的示例:
- 一个类是可以实现一个或者多个接口的,实现接口使用
public class SmartPhone extends Telphone implements IPlayGame{
类体部分...
//如果继承了抽象类,需要实现继承的抽象方法;
//也需要实现接口中的抽象方法(接口中的普通方法可以不实现)
}
- 描述:
- 代码示例
- 定义接口
IPlayGame
- 定义接口
public interface IPlayGame {
public void playGame();//接口中的方法不需要实现
}
- 在SmartPhone类中实现接口IPlayGame
/**
* Created by xiezhongtian on 2017/8/24.
* SmartPhone类继承Telphone类并实现接口IPlayGame
* 通过接口IPlayGame描述两个不同类型的类之间的特征(玩游戏)
*/
public class SmartPhone extends Telphone implements IPlayGame{
@Override
public void call() {
System.out.println("智能机:可以使用种类繁多的APP打电话");
}
@Override
public void sendMessage() {
System.out.println("智能机:可以通过语音发短信");
}
@Override
public void playGame() {//实现接口中只能手机有玩游戏的特性
System.out.println("智能机:可以玩游戏");
}
}
- 在Psp类中实现接口IPlayGame
/**
* Created by xiezhongtian on 2017/8/24.
*/
public class Psp implements IPlayGame {
@Override
public void playGame() {//实现接口中玩游戏的特性
System.out.println("Psp:具有玩游戏的功能");
}
}
- 通过接口来使用两个不同类的方法
//接口(Interface)
IPlayGame iPlayGame1 = new SmartPhone();//接口的引用指向了一个实现了接口的对象
IPlayGame iPlayGame2 = new Psp();
iPlayGame1.playGame();
iPlayGame2.playGame();
- 输出 两个不同类型对象的共同特性
智能机:具有玩游戏的功能
Psp:具有玩游戏的功能
匿名内部类的方式实现接口
- 接口在使用的过程中,还经常和匿名内部类配合使用
- 所谓匿名内部类,就是指没有名字的内部类
- 多用于关注实现而不关注实现类的名称场景中
- 语法格式
/*
* 匿名内部类实现接口的语法格式:
* interface i = new interface(){
* public void method(){
* System.out.println("匿名内部类实现接口的方式!!");
* }
* }
*
* */
//1.常规方法
IPlayGame iPlayGame3 = new IPlayGame(){
@Override
public void playGame() {
System.out.println("[匿名内部类]:使用匿名内部类的方式实现接口!!");
}
};
iPlayGame3.playGame();
//2.直接new接口的方式
new IPlayGame(){
@Override
public void playGame() {
System.out.println("[直接New]:使用匿名内部类的方式实现接口!!");
}
}.playGame();
}
输出:
[匿名内部类]:使用匿名内部类的方式实现接口!!
[直接New]:使用匿名内部类的方式实现接口!!