概述
接口相当于抽象类,但接口中 所有方法 都 没有方法体
接口 不能被实例化,接口 没有构造方法,没有成员变量
很好的体现了面向对象的编程思想
作用
- 接口主要就是 声明方法,相当于制定规范、标准
- 弥补java单继承的缺点
类比
早年手机,不同手机厂商的手机,充电口互不通用,导致十分混乱
接口 相当于 USB接口,通过制定 USB接口 规范,其他厂家按照该规范生产制造USB接口,符合USB接口的设备,都可以 充电 或 传输数据,达到通用的目的
定义
与定义类方式相似,但使用 interface 关键字。它也会被编译成 .class 文件,但不是类,而是另外一种引用数据类型
public interface 接口名称 {
// 抽象方法
}
声明方法
使用 public abstract 关键字修饰,可以 省略,不能有方法体。 代码如下:
public interface USB {
public abstract void chongdian();
}
接口的使用
类与接口的关系为 实现 关系,即:类实现接口,该类称为接口的实现类。
实现的动作类似继承,格式相仿,只是关键字不同,实现使用 implements 关键字。
普通类(非抽象类)实现接口:
- 必须重写接口中所有抽象方法。
实现
定义实现类:
public class Android implements USB {
@Override
public void chongdian() {
System.out.println("充电");
}
}
定义测试类:
public class Test {
public static void main(String[] args) {
Android ad=new Android();
//由于android类实现了USB接口,那么就一定可以调用android类对象的chongdian()
ad.chongdian();
}
}
实现多个接口
之前学过,在继承体系中,一个类只能继承一个父类。而对于接口而言,一个类是可以实现多个接口的,这叫做接
口的多实现。并且,一个类能继承一个父类,同时实现多个接口。
实现格式:
class 类名 [extends 父类名] implements 接口名1,接口名2,接口名3... {
// 重写接口中抽象方法
}
抽象方法
实现多个接口时,实现类必须重写所有抽象方法
例子:
定义 耳机 接口:
public interface Erji {
void bofang();
}
定义实现类,实现多个接口:
public class Android implements USB,Erji {
@Override
public void chongdian() {
System.out.println("充电");
}
@Override
public void bofang() {
System.out.println("播放声音");
}
}
多接口存在同名抽象方法
实现多个接口时,如果抽象方法有重名的,只需要重写一次
接口的继承
一个接口可以继承(extends)另一个接口
//当子接口继承父接口,也就拥有了父接口的方法
public interface TYPEC extends USB {
void kuaiSuChongDian();
}
public class Huawei implements TYPEC{
@Override
public void kuaiSuChongDian() {
System.out.println("快速充电");
}
@Override
public void chongdian() {
System.out.println("充电");
}
}
其他成员特点
- 接口中,无法定义成员变量,但是可以定义常量,其值不可以改变,默认使用public static final修饰。
- 接口中,没有构造方法,不能创建对象。
- 接口中,没有静态代码块。
