首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >抽象类VS接口

抽象类VS接口

作者头像
全栈程序员站长
发布2022-08-09 20:54:01
发布2022-08-09 20:54:01
4120
举报

大家好,又见面了,我是你们的朋友全栈君。

在学设计模式的过程中,有的模式定义了抽象类,有的模式定义了接口,这两种形式都体现了面向对象的抽象,但是抽象类和接口又有什么联系和区别呢?

一.前言

接口是对动作的抽象,抽象类是对根源的抽象。

抽象类表示的是,这个类是什么。接口表示的是,这个对象能做什么。(比如:男人、女人,都是人,说明人就是一个抽象类。人可以吃东西,动物也可以吃东西,所以就可以把“吃东西”定义为一个接口,然后让这些类去实现它。)

所以,一个类只能继承一个抽象类(男人、女人都是人类,而不是动物类),但一个类可以实现多个接口(人可以吃饭、运动、学习等)。

通过这个例子,我们对接口和抽象类有了一定的认识与理解。

二.抽象类

抽象类:在面向对象中,有些类实例化是没有意义的,比如动物类和老虎类,老虎类可以实例化一只长得很可爱的小老虎,而动物类实例化一个动物,一个动物长什么样?动物是一个抽象的概念,没有具体的对象与之对应。所以对于实例化没有任何意义的类,可以称作抽象类,用abstract class表示。

抽象类就是为了继承而存在的,如果定义了一个抽象类,却不去继承它,那么等于白白创建了这个抽象类,因为我们不能用它来做任何事情。

抽象方法:与抽象类的概念相对应,有的抽象类中的方法没有任何意义,所以就可以改为抽象方法,在方法前加abstract即可。

注意:

1.抽象类不能实例化。

2.抽象方法必须被子类重写。

3.如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其他一般方法。

4.包含抽象方法的类称为抽象类,但并不意味着抽象类中只能有抽象方法,它和普通类一样,同样可以拥有成员变量和普通的成员方法。

抽象类和普通类的区别:

1.抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。

2.抽象类不能用来创建对象。

3.如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。

三.接口

定义:接口是把隐式公共方法和属性组合起来,以封装特定功能的一个集合。接口用interface声明,在接口的名称前加“I”。

一个类可以支持多个接口,多个接口也可以支持相同的接口。

四.抽象类VS接口

1.类是对对象的抽象;抽象类是对类的抽象;而接口是对行为的抽象。

2.如果行为跨越不同类的对象,可使用接口;对于一些相似的类对象,用继承抽象类。

3.抽象类是从子类中发现了公共的东西,泛华出父类,然后子类继承父类,而接口根本不知道子类的存在,方法如何实现也不能确定。

4.实现接口类就必须实现接口类中的所有方法和属性,而具体类继承抽象类是,对于抽象的方法需要重写,但是抽象类中的具体方法不必全都实现。

5.在语法上声明接口和声明抽象类完全相同,但是接口中的方法或属性前面不能有修饰符,方法没有方法体(即不提供接口中任何成员的执行方式)。

抽象类的功能要远超过接口,但是,定义抽象类的代价高。因为高级语言来说(从实际设计上来说也是)每个类只能继承一个类。在这个类中,必须继承或编写出其所有子类的所有共性。虽然接口在功能上会弱化许多,但是它只是针对一个动作的描述。而且可以在一个类中同时实现多个接口。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/105772.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年4月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一.前言
  • 二.抽象类
  • 三.接口
  • 四.抽象类VS接口
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档