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


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

 

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm安装教程2021.2.2_eclipse环境配置

    pycharm安装教程2021.2.2_eclipse环境配置在PyCharm中如何配置Anaconda3环境软件:PyCharm2020.2.2×64;Anaconda3(64-bit)步骤如下:1.File→NewProject2.选择Newenvironment,Conda选项我的是默认选好的,没有更改3.Create即可,下一次创建新的项目默认使用Anaconda环境…

    2022年8月29日
    4
  • 中国名花异草故事

    中国名花异草故事中国名花异草故事作者:刘桂莉、余绮中国名花异草故事—总序  我不是旅行家,几十年来到过的地方却不少。每到一地,工作之余,对当地的一些人情、习俗、山川、风物,以至特殊的传说故事,都颇感兴趣。在谈论或介绍本地的特产时,当地人往往绘声绘色而且充满着喜悦与自豪,连带讲到的一些掌故与传奇,我也感觉兴味盎然。因为其中有些内容,活泼生动,不仅使我扩大了见闻,觉得新鲜有趣,还能增进我对这些地方历史、社会的

    2022年5月29日
    29
  • SqlServer服务器和数据库角色

    SqlServer服务器和数据库角色

    2021年11月25日
    42
  • 如何查看vue版本和vue/cli的版本

    如何查看vue版本和vue/cli的版本经常有人以为vue-V是查看vue的版本,但其实不是,一开始自己迷迷糊糊也以为是,后来查文档之后才知道正确答案,特此在这里总结一下,那么这条博客就当是开启学习vue3之路的第一条笔记叭~如果查看vue版本和vue/cli脚手架的版本,这里共有两种方式:一、命令行vue版本npmlistvuevue/cli版本vue-V部分截图:二、package.json文件查看package.json文件相关依赖版本号:…

    2022年5月16日
    206
  • scrapy下载图片报[scrapy.downloadermiddlewares.robotstxt] DEBUG: Forbidden by robots.txt:错误[通俗易懂]

    scrapy下载图片报[scrapy.downloadermiddlewares.robotstxt] DEBUG: Forbidden by robots.txt:错误[通俗易懂]本文转自:http://blog.csdn.net/zzk1995/article/details/51628205先说结论,关闭scrapy自带的ROBOTSTXT_OBEY功能,在setting找到这个变量,设置为False即可解决。使用scrapy爬取淘宝页面的时候,在提交http请求时出现debug信息Forbiddenbyrobots.txt,看来是请求被拒绝了。…

    2022年6月12日
    26
  • 远程连接windows2003桌面无法使用剪切板的有效解决方法

    远程连接windows2003桌面无法使用剪切板的有效解决方法

    2021年11月17日
    48

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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