美文网首页
理解Abstract class和Interface

理解Abstract class和Interface

作者: fzwan | 来源:发表于2018-04-18 14:40 被阅读0次

理解Abstract class和Interface


抽象类是什么

  Java中的Abstract class和Interface都是用来定义某种抽象事物的,这两者和类这一概念的区别在于类可以实例化,而他们不能(类用来表示人类、鸭子等可以有实际映射的存在,而Abstract class和Interface用来表示物种这一不能实例化的概念)。
  抽象体(即被Abstract和Interface定义的抽象事物)在实际编程中定义一类行为,却不对其做实际的描述,在继承或者实现中才涉及到具体的实现,也就是说,抽象体隐藏了具体的实现,而仅仅提供统一的接口,在实际实现中可以根据需要进行实现或者扩展。这符合面向对象设计原则中的"对修改封闭,对扩展开放"的原则。

语法上的区别

abstract class Java语法

abstract class AbstractClass { 
//阿里Java规范推荐抽象类的名称命名规范应当用Abstract开头
//abstract应当省略,默认当然是abstract的
    abstract void dosth1();   
    abstract void dosth2();
}

interfact Java语法

interface bloger {
    void dosth1();
    void dosth2();
}

其中abstract class中可以拥有普通数据成员,而interface只能是static final的并且一般不推荐在interface中添加数据成员。
我理解为abstract class倾向于实现可以保留自己特性的,允许一定程度上不开放的抽象,而interface则是彻底的开发,甚至不允许拥有private的方法。

编程实践上的区别

许多更早的书或者博客在分析abstract class和interface的区别时会提到是否允许方法的默认实现,在之前的Java版本中interface是不允许有默认实现的,但是在Java8中加入了interface的default方法。

public interface defaultable {
    default int defaultMethod(int a){
       return a;
    }
}

设计模式上的使用

abstract class和interface在使用上最大的区别应当是IS A 和 LIKE A 的区别,继承一个抽象类表示是什么,而实现一个接口仅仅表示实现了某个功能,即使在他们可以实现对方功能的情形下也应当明确区分其区别,这影响到代码的可维护性和可阅读性。
另一方面,Java是不支持多继承的,却可以同时实现多个接口,如果我们继承了某个抽象类,就应当表示子类在本质上属于父类(比如桌子属于家具),而接口的实现仅仅表示可以完成某种功能。也就是说,使用继承描述不会轻易改变的更本质的部分,而使用接口实现更灵活的扩展功能。


--后续可能继续完善或更改错误,内容主要用于个人学习

相关文章

网友评论

      本文标题:理解Abstract class和Interface

      本文链接:https://www.haomeiwen.com/subject/cvbvkftx.html