抽象类VS接口

抽象类VS接口抽象类VS接口

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

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

一.前言

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

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

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

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

二.抽象类

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

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

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

注意:

1.抽象类不能实例化。

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

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

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

抽象类和普通类的区别:

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

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

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

三.接口

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

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

四.抽象类VS接口

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

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

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

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

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


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

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • NFV SDN_sdn和nfv与云计算

    NFV SDN_sdn和nfv与云计算专业技术分析NFV与SDN的区别是什么?5条评论2013-06-1400:01   it168网站原创 作者:vivia/译 编辑: 闫志坤  【IT168技术】软件定义型网络(SDN)和网络功能虚拟化(NFV)都是热议的话题。他们之前显然是有关系的,但是它们有哪些地方类似呢?不同之处又在哪里?二者如何做到相互补充呢?  SDN——诞生于高校,成

  • cubieboard 资源

    cubieboard 资源开发链接:http://pan.baidu.com/s/1o6r27V0密码:46h2文档资料:http://pan.baidu.com/s/1kTFXMSZ密码:9pka视频资料:http://pan.baidu.com/s/1ntLYBLB密码:mvcf http://dl.cubieboard.org/model/cubietruck/…

  • Mac 开启apache PHP

    Mac 开启apache PHP命令行:开启apache服务:sudoapachectlstart停止apache服务:sudoapachectlstop重启服务:sudoapachectlrestart查看版本:httpd-v开启之后打开浏览器输入:localhost,看到Itworks!说明服务正常开启!命令行打开系统隐藏目录:open/etc/apache21.httpd

  • Linux中,常常会用到 vim ,其中 q ,wq wq!的区别,以及 vim -r 的作用[通俗易懂]

    w->表示保存退出wq!->表示强制保存退出,可以保存”readonly”只读文件q->在vim中表示退出q!->表示强制不保存退出,不对文件进行保存wq和wq!的区别如下:有些文件设置了只读,一般不是修改文件的,但是如果你是文件的owner或者root的话,通过wq!还是能保存文件退出如果文件设置为只读了的话,用:wq命令是不能保存并退出的,但是最高权限者可通过wq!来进行文件的保存并退出文件。已设定选项‘readonly’(请加!强制执行)!.

  • 1、Cocos2dx 3.0游戏开发三找一小块前言[通俗易懂]

    1、Cocos2dx 3.0游戏开发三找一小块前言

  • break和continue的作用和区别是什么?

    break和continue的作用和区别是什么?break和continue的作用和区别是什么?一、break和continue的作用二、break和continue的区别三、案例分析一、break和continue的作用break和continue都是用来控制循环结构的,主要是停止循环。二、break和continue的区别1、break用于跳出一个循环体或者完全结束一个循环,不仅可以结束其所在的循环,还可结束其外层循环。注意:(1)只能在循环体内和switch语句体内使用break;(2)不管是哪种循环,一旦在循环体中遇到break,系

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号