一、接口
生活中接口的例子有很多:
电源插座插孔可以插各种符合要求的电器,充电器,电视等等
电脑的USB接口可以插U盘,鼠标等等设备
从上面可以看出
接口就是公共的行为规范标准,大家在实现时,只要符合规范标准,就可以通用
在Java中,接口可以看成是:多个类的公共规范,是一种引用数据类型
二、语法规则
接口的定义格式与定义类的格式基本相同,将class
关键字换成interface
关键字,就定义了一个接口。
public interface Test1 {
public abstract void method1();
public void method2();
abstract void method3();
void method4();
}
上面4个方法都是可以的, public abstract
是固定搭配,可以不写,推荐用method4
的写法,代码更加简洁
三、接口的使用
接口不能直接使用,必须要有一个"实现类"来"实现"该接口,实现接口中的所有抽象方法
public interface Test1 {
public abstract void method1();
public void method2();
abstract void method3();
void method4();
}
class Test2 implements Test1{
@Override
public void method1() {
}
@Override
public void method2() {
}
@Override
public void method3() {
}
@Override
public void method4() {
}
}
注意:子类和父类之间是extends
继承关系,类与接口之间是implements
实现关系
四、接口的特性
- 接口是一种引用类型,但是不能直接
new
接口的对象
public class Test {
public static void main(String[] args) {
new Test1(); //报错 java: Test1是抽象的; 无法实例化
}
}
- 接口中每一个方法都是
public
的抽象方法, 即接口中的方法会被隐式的指定为public abstract
(只能是public abstract
,其他修饰符都会报错)
public interface Test1 {
public abstract void method1();
public void method2();
abstract void method3();
void method4();
private void method5(); //报错
}
- 接口中的方法是不能在接口中实现的,只能由实现接口的类来实现
public interface Test1 {
public abstract void method1();
public void method2();
abstract void method3();
void method4(){ //报错
System.out.println("666");
}
}
- 重写接口的方法只能使用public
- 接口的变量会被隐式的指定为public static final
- 接口中不能含有静态代码块和构造方法
五、实现多个接口
我们先写3个接口分别对应“会飞的”,“会跑的”,“会游的”
interface IFlying {
void fly();
}
interface IRunning {
void run();
}
interface ISwimming {
void swim();
}
我们再创建一个具体的动物(父类动物省略)
class Frog extends Animal implements IRunning, ISwimming {
public Frog(String name) {
super(name);
}
@Override
public void run() {
System.out.println(this.name + "正在往前跳");
}
@Override
public void swim() {
System.out.println(this.name + "正在蹬腿游泳");
}
}
不能多继承但可以实现多个接口
六、接口的继承
使用extends
关键字
interface IRunning {
void run();
}
interface ISwimming {
void swim();
} // 两栖的动物, 既能跑, 也能游
interface IAmphibious extends IRunning, ISwimming {
}
class Frog implements IAmphibious {
//...
}