接口interface:
1. 在接口中没有变量,成员无论如何定义,都是公共常量,public static final即使不显式声明也如此。
2. 所有接口方法均隐含public abstract即使不显式声明也如此。(因而也不能使用protected和private修饰,不加修饰也不是默认权限)
3. 接口可以继承其他接口但是不能继承类,不能设计父接口中的方法,不能实现别的接口。
4. 任何类都可以引用接口,并对其中的方法进行自类中的实现。
抽象类abstract class:
1. 变量和方法均可定义权限,和普通类一样。
2. 抽象类只能有一个继承的父类但是可以implement很多接口和普通类一样。
3. 子类可以继承抽象类和普通类一样。换言之,抽象类不过是能够使用抽象方法的普通类。
看到这里,相信大家都在思考,既然接口本身不能实现任何功能且只能提供一些常量,那么接口有什么意义呢?
笔者看来接口更像是对上层的文档一样,在Java Web的中间层开发中,往往会提供接口-实现这样的开发模式,在接口类不改动的情况下,任意的改变实现是对其他层没有影响的,只要接口不改则其他层不需要改,接口起到的更像是一个API文档的作用。这样降低了应用的耦合度,增强了程序的可扩展性。
当需要检查我们的对象都使用了哪些接口,继承了哪些类时,可以用instanceof进行检查,instanceof看起来像是一个函数名,但实际上是一个操作符,使用方法类似:
Son son=new Son();
if(son isntanceof Father){
}
符号左边是一个对象,右边是一个类名,可以检查是否具有继承关系以及implement实现关系,中文翻译可以是:可以视作。
运用这个运算符,我们可以更好的整理好我们的继承多态结构,也可以更好的使用一些多态功能。