接口的定义
如果一个抽象类中所有的方法都是抽象的,则可以用另一种方式来定义这个类,即接口。
interface Animal{
int ID = 1; // 定义全局常量
void breathe(); //定义抽象方法
void run();
}
上面的代码中,Animal即为一个接口。接口中定义的方法默认使用public abstract
修饰,即抽象方法。接口中的变量默认使用public static final
修饰,即全局常量。
因为接口中的方法都是抽象方法,不能通过实例化对象来调用,因此需要定义一个类,并用implement
关键字实现接口中的所有方法。下面通过一个案例来学习。
interface Animal{
int ID = 1;
void breathe();
void run();
}
class Dog implements Animal{
@Override
public void breathe() {
System.out.println("狗在呼吸");
}
@Override
public void run() {
System.out.println("狗在跑");
}
}
public class Test{
public static void main(String[] args) {
Dog dog = new Dog();
dog.breathe();
dog.run();
}
}
运行结果为
从运行结果来看,Dog类在实现了Animal接口后是可以被实例化的。
接下来对接口的一些特征进行归纳:
- 接口中的方法都是抽象的,不能实例化;
- 一个类要实现接口时,如果这个类是抽象类,那么只需要实现接口中的部分方法,否则,要实现接口中的所有方法;
- 一个类通过
implement
关键字实现接口时,可以实现多个接口,被实现的多个接口要用,
隔开; - 一个接口可以通过
extends
关键字继承多个接口,接口之间用,
隔开; - 一个类在继承另一个类的同时还可以实现接口,此时,
extends
关键字必须在implement
关键字之前。具体实例如下:
class Dog extends Canidae implements Animal{ // 先继承,再实现
// 程序代码......
}