abstract class和interface的区别与联系

联系

1.二者都是用来进行抽象类(本文中的抽象类并非从abstract class翻译而来,它表示的是一个抽象体,而abstract class为Java语言中用于定义抽象类的一种方法,请读者注意区分)定义的,在面向对象中,所有的对象都是用类来描述的,但是反过来却不是这样。并不是所有的类都是用来描述对象的,如果一个类没有包含足够的信息来描述一个具体的对象,这样的类就是抽象类。比如动物是抽象类,狗、猫是具体的对象。
2.抽象类主要是用于类型隐藏。我们可以构造出一组固定的行为描述,但是这组行为可以有任意个具体的实现方式,这个行为描述就是抽象类,具体实现就是派生类。模块可以操作这个抽象体,由于模块依赖于这个抽象体,因此他可以是允许不被修改的,通过抽象体可以派生不同的实现类,从而扩展该模块的功能。

区别

1.abstract class可以定义字段,interface不可以定义字段;
2.abstract class有默认实现,interface在JDK1.8之前没有默认实现;
3.abstract class在Java语言中表示的是一种继承关系,Java只能继承单个abstract class,但是可以实现多个interface;
4.abstract class表示的是"is a"关系,interface表示的是"like a"关系。比如说动物抽象类,有派生类:猫、狗和老鹰,其中动物类有两个共同的方法吃和睡,但是老鹰又具备一个独特的技能“飞”,因此可以有如下代码:

abstract class Animal {
    abstract void eat();
    abstract void sleep();
}

interface FlyAble{ 
    void fly();
}

class Dog extends Animal{
  void eat(){...}
  void sleep(){...}
} 


class Cat extends Animal{
  void eat(){...}
  void sleep(){...}
} 


class Eagle extends Animal implements FlyAble{
  void eat(){...}
  void sleep(){...}
  void fly(){...}
} 

结论

abstract class和interface是Java语言中的两种定义抽象类的方式,它们之间有很大的相似性。但是对于它们的选择却又往往反映出对于问题领域中的概念本质的理解、对于设计意图的反映是否正确、合理,因为它们表现了概念间的不同的关系(虽然都能够实现需求的功能)。这其实也是语言的一种的惯用法,希望读者朋友能够细细体会。

参考:https://www.ibm.com/developerworks/cn/java/l-javainterface-abstract/index.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,454评论 18 399
  • abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机...
    Jabari阅读 6,060评论 1 36
  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 11,951评论 0 62
  • JAVA面试题 1、作用域public,private,protected,以及不写时的区别答:区别如下:作用域 ...
    JA尐白阅读 4,884评论 1 0
  • 2e45075fd084阅读 2,920评论 3 0

友情链接更多精彩内容