在面向对象编程中,定义类的过程就是对象的抽象和封装的过程,而接口与抽象类就是对实体类更高层次的抽象,仅定义公共行为和特征。接口与抽象类的共同点是都不能被实例化。
我们先来分析下两者的的区别:被继承时:
一般来说抽象类在被继承时,体现的是is-a的关系,接口在实现时体现的是can-do的关系。就是继承抽象类的类,也是抽象类的一个,而对接口来说,就是能够做接口中的事。
我们在定义接口和抽象类时,举个例子: 老鹰是一种鸟,鸟是一个对象。我们应该把鸟定义成抽象类,老鹰去继承他。飞行是鸟都会的一种行为,我们需要把飞行定义成一个接口,fly()放在接口中,利用can-do的方式去定义这个fly的接口。
接口是最顶级的“类”,抽象类相当于二当家,抽象类对各个接口进行组合,然后实现部分接口行为。
当纠结定义接口还是抽象类时,优先推荐定义接口,符合接口隔离原则,按多维度划分为多个接口。
取自《码出高效JAVA开发手册》
网友评论