学习JAVA的过程中,最让我郁闷的恐怕就是接口这个东西了。这个Interface,一度让我觉得是个鸡肋,看清楚,是鸡肋不是基类。在我一直的意识中,OO就是抽象,继承,再抽象,再继承。而这个接口在我看来无非是一个继承的替代品,一个多重继承的替代品。

可以为什么,我们要做接口而不是直接实现多重继承呢,JAVA开发组毕竟不是傻的。我带着疑问询问了google和还有一些前辈。

interface,可以说是class的类别,也可以说是对class的定义的一种规范。把不同的对象放到不同的接口里面,然后更好的管理它们。是一种对对象的抽象。

抽象这个词在这里额外的重要。其实对于继承来说,继承的意义也并不是完全在于我想要复用代码,而是在抽象。假设我们有类A里面有一函数run,类B也想用这个方法。于是有些人就class B extends A,这样的做法是不经过大脑的。其实我们有办法来实现而不造成更大的负担,比如:

class B {
	function run() {
		A a = new A();
		A.run();
	}
}

这种想要靠继承来完成代码复用的思想可以说是对继承的滥用,而Java取缔多重继承实际上也是在制止这样的滥用继承,体现更好的设计模式。实际上,当我们想要去抽象对象的行为,而不考虑对象的本身属性的时候,我们就应该使用接口来处理对象与对象直接的通信。

另外,接口还能帮助我们更快的开发,而不用在父类与父类之上在建立一个父类,从而面对多级继承带来的负担。比如我们这时候要描述一个吃东西的行为。我们只需要有这样的一个接口。

interface eat {
	function go() {}
}

这时候我们就不用去考虑是人还是狗,是黑人还是白人,吃东西前会做祈祷还是会先喝汤,即便他是个火星人,即便他吃饭前会玩一次躲猫猫,只要你觉得它要吃东西,那么你就让他使用这个接口,然后具体的实现它。这样如果我们把这些类的实例化放到一个工厂里,就能更好的体现出一个接口的抽象化。