接口 interface
接口的定义
[访问权限修饰符] interface 接口名{
//接口成员
}
接口中可以定义的成员有:
-
方法
- 方法都是抽象方法
- 访问权限为public
-
属性
- 只能是常量,声明时同时赋值
- 访问权限为public
- public static final
接口的实现
关键字: implements
//A 是接口 B的实现类
public class A implements B{
}
- 一个类可以实现多个接口,如果多个接口有同一个方法,那实现类只需要实现一次
- 接口的实现和父类的继承没有关系,一个类既可以继承父类,也可以实现接口
- 接口之间是可以有继承存在的,且接口间的继承是多继承
接口中的多态
- 向上转型
- 由实现类转换为接口类型
- 是一个隐式转换,肯定会成功
- 向上转型后,将只能访问接口中的成员
- 向下转型
- 由接口类型转换为实现类类型
- 是一个显式转换,需要强制类型转换,最好加上instanceof判断能否转型成功
- 向下转型后,将可以访问实现类中特有的成员
- 体现
- 由接口引用调用接口中的方法,最终实现是不同实现类的实现方式
案例
public class Test{
public static void main(String[] args){
Cat cat = new Cat();
Person xiaoming = new Person();
//将Animal的子类Cat类对象传入
xiaoming.supplyFood(cat);
}
}
class Person{
public void supplyAnimal(Animal a) {
if(a instanceof Cat) {
((Cat)a).supplyFood();
}else if(a instanceof Dog) {
((Dog)a).supplyFood();
}
}
}
interface Animal{
public abstract void supplyFood();
}
class Cat implements Animal{
@Override
public void supplyFood() {
System.out.println("给猫喂鱼");
}
}
class Dog implements Animal{
@Override
public void supplyFood() {
System.out.println("给狗吃肉");
}
}
输出结果(https://img-blog.csdnimg.cn/20190507193351195.png)
JDK1.8 接口中的新特性
default
java8对接口添加一个新特性,可以使用关键字default来修饰接口中的方法,表示这个方法有默认实现,对这个方法添加方法体。实现类在实现接口的时候,可以不实现这个default方法
static
java8对接口添加一个新特性,可以使用关键字default来修饰接口中的方法,表示这个方法是静态方法,接口中的静态方法也必须有方法体来实现。
接口中的静态方法,必须由接口来调用。