接口
看完了抽象类(https://www.jianshu.com/p/ccebd08248f7
)之后可能有人就要说了,我还是觉得抽象类除了有抽象方法和不能实例化之外和普通的父类没有区别。Java说行啊,那我就整个更加能满足你需求(装X)的东西——接口。
咳咳。。。上面纯属玩笑,我们下面进入正题。
接口的使用
定义接口及子类实现
首先我们定义两个接口MyInterface、MyInterface2以及它们内部的变量和方法;然后定义一个实现类InterfaceImpl同时实现两个接口及两个接口各自的方法。
public interface MyInterface {
String NAME = "qingtian";
void printA();
}
public interface MyInterface2 {
void printB();
}
public class InterfaceImpl implements MyInterface, MyInterface2 {
@Override
public void printA() {
System.out.println("this is InterfaceImpl printA()" + " and MyInterface NAME:" + NAME);
}
@Override
public void printB() {
System.out.println("this is InterfaceImpl printB()");
}
}
调用方式
InterfaceImpl myInterface = new InterfaceImpl();
myInterface.printA();
myInterface.printB();
输出结果:
this is InterfaceImpl printA() and MyInterface NAME:qingtian
this is InterfaceImpl printB()
为什么要这样实现?
还是用我们上一节用到的动物的例子,有些动物比较特殊,比如鳄鱼,它既能在陆地上跑也能在水里游。而为了不让父类过于笼统我可能把在陆地上的动物划为了一类,在水里生活的动物划为另一类。这种时候接口的作用就体现出来了,用普通类和抽象类都只能单继承,但是用接口却能同时实现多个接口,让鳄鱼既能跑又能游。而多继承恰恰是接口最重要的特性,只要代码写的够好,你的鳄鱼甚至还能飞上天~
接口的使用规范及意义
使用规范
1.接口及接口中的每一个方法都是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)。
2.接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)。
3.接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法,并且该接口中的所有方法都必须实现。
意义
1.更好的将设计与实现分离(又是官话,多写代码才能体会~)。
2.多继承多实现(超好用)。
接口与类、抽象类的对比
与类对比
1.接口不能用于实例化对象。
2.接口没有构造方法。
3.接口中所有的方法必须是抽象方法。
4.接口不能包含成员变量,除了 static 和 final 变量。
5.接口不是被类继承了,而是要被类实现。
6.接口支持多继承。
与抽象类对比
1.抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行。
2.抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。
3.一个类只能继承一个抽象类,而一个类却可以实现多个接口。
4.抽象类可以有构造方法,接口没有构造方法。
PS:JDK 1.8 以后,接口里可以有静态方法和方法体了。
网友评论