Java中的抽象类和接口之间的异同点

本文是自学期间查看资料所写,也是看了很多做的总结,能力有限,如果出现错误,希望大家指正,谢谢。

一、什么是抽象类

抽象类顾名思义是之抽象出来的类,具有多个类的共性,是抽象的。抽象类和具体类是相对的概念。“抽象”是一种存在思想逻辑中的概念,而“具体”是一种可见可触摸的现实对象。简单说,法拉利,保时捷,兰博基尼,布加迪等多种车子,可以抽象出车,也可以抽象出跑车,这就是抽象出来的类别,称为抽象类。

抽象类的设计目的是代码复用

在抽象类中是先有子类再有父类,将子类的共性抽取成父类。所以抽象类有一个特性:

有抽象方法必须被声明为抽象类,而抽象类不一定有抽象方法。

抽象是对类本质的抽象,表达的是is a的关系,抽象类包含并实现子类的通用特性,将子类存在的差异化的特性进行抽象,交给子类去实现。

二、什么是接口

接口的设计目的是对行为的约束。

接口可以强制要求不同的类具有相同的行为,他只约束了行为的有无,并不对行为是如何实现的进行约束。简单说,你实现了这个接口,接口里面的东西你必须要有,你怎么用是你的问题,但你也必须要用。

接口是对行为的抽象,表达的是like a的关系,接口的核心是定义行为,即实现类可以做什么,至于实现类主体是谁,如何实现,接口不关心。

三、使用场景

当你关注事物的本质时,就需要对事物进行区分,分析异同点,就可以将部分事物的共性抽象出来,就需要使用抽象类!
当你关注一个操作的时候,和事物没有关系,就需要使用接口!

四、接口和抽象类的相同点

  • 抽象类和接口都不能实例化,但可以定义抽象类和接口类的引用。
  • 一个类如果继承了某个抽象类,或实现了某个接口,都需要对其中的抽象方法全部进行实现,否则该类仍然需要被声明为抽象类。

五、接口和抽象类的不同点

  • 抽象程度不同: 接口比抽象类更加抽象,因为抽象类中可以定义构造器,可以有抽象方法和具体方法。接口中不能定义构造器,而且其中的方法全部是抽象方法。
  • 权限修饰符不同: 抽象类中的成员可以是private、default、protected和public的。接口中的成员全是public的。
  • 成员变量的定义范围不同: 抽象类可以定义成员变量,接口中定义的成员变量都是常量。
  • 成员变量的自由程度不同: 接口成员变量默认为public static final,必须赋初值,不能被修改;其所有的成员方法都是public、abstract的。抽象类中成员变量默认default,可在子类中被重新定义,也可被重新赋值;
  • 功能不同: 抽象类作为很多子类的父类,它是一种模板式设计。而接口是一种行为规范,它是一种辐射式设计。
  • 抽象类的设计目的是代码复用,接口的设计是对行为的约束。
  • 抽象方法被abstract修饰,不能被private、static、synchronized和native等修饰,必须以分号结尾,不带花括号。
  • 单继承,extends。多实现,implements。

六、应用

  • 抽象类的功能相比较多于接口,但定义抽象类的代价高。
  • 高级语言中,只能实现单继承。在这个类中,你必须继承或编写出其所有子类的所有共性。
  • 接口虽然在功能上会弱化许多,但是它只是针对一个动作的描述,但可以在一个类中同时实现多个接口。
  • 抽象类的设计目的是代码复用,接口的设计是对行为的约束。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值