抽象类和接口的区别

抽象类和接口的区别

大家好,又见面了,我是全栈君。

抽象类:
1)由abstract关键字修饰
2)包含抽象方法的类必须是抽象类不包含抽象方法的类也可以声明为抽象类
3)抽象类不能被实例化
4)抽象类是需要被继承的,需要重写或者声明为抽象类:
4.1)重写所有抽象方法
4.2)也声明为抽象类
5)抽象类的意义:
5.1)封装子类共有的属性和行为
5.2)为所有子类提供一种统一的类型
5.3)可以包含抽象方法,为所有子类提供统一的入口每个子类的实现不同,但入口是一致的
接口:
1)是一个标准、规范遵守了这个标准,就能干某件事
2)接口是一种数据类型(引用类型)
3)由interface定义
4)只能包含常量和抽象方法
5)接口不能被实例化
6)接口是需要被实现的,实现类:必须重写接口中的所有抽象方法
7)一个类可以实现多个接口,用逗号隔开若又继承又实现时,应先继承后实现
8)接口可以继承接口

抽象类是用来捕捉子类的通用特性的 。它不能被实例化,只能被用作子类的超类。抽象类是被用来创建继承层级里子类的模板。

接口是抽象方法的集合。如果一个类实现了某个接口,那么它就继承了这个接口的抽象方法。这就像契约模式,如果实现了这个接口,
那么就必须确保使用这些方法。接口只是一种形式,接口自身不能做任何事情。

如果你拥有一些方法并且想让它们中的一些有默认实现,那么使用抽象类吧。
如果你想实现多重继承,那么你必须使用接口。由于Java不支持多继承,子类不能够继承多个类,但可以实现多个接口。因此你就可以使用接口来解决它。
如果基本功能在不断改变,那么就需要使用抽象类。如果不断改变基本功能并且使用接口,那么就需要改变所有实现了该接口的类。

 

区别
1.语法层面上的区别
  1)抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract 方法;
  2)抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;
  3)接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;
  4)一个类只能继承一个抽象类,而一个类却可以实现多个接口。
2.设计层面上的区别
  1)抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为
,但是接口却是对类局部(行为)进行抽象。

  2)设计层面不同,抽象类作为很多子类的父类,它是一种模板式设计。而接口是一种行为规范,它是一种辐射式设计。

转载于:https://www.cnblogs.com/CaiNiao-TuFei/p/7470855.html

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

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

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


相关推荐

  • springboot启动后自动停止_redis启动停止重启

    springboot启动后自动停止_redis启动停止重启springboot项目启动后自动停止,也引入了jar包<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>但是启动仍然自动停止,怎么搞?在启动类上增加捕获异常并打印日志publicstaticvoidmain(Strin

    2022年9月3日
    3
  • 良心推荐,我珍藏的一些Chrome插件[通俗易懂]

    良心推荐,我珍藏的一些Chrome插件[通俗易懂]上次搬家的时候,发了一个朋友圈,附带的照片中不小心暴露了自己的Chrome浏览器插件之多,于是就有小伙伴评论说分享一下我觉得还不错的浏览器插件。我下面就把我日常工作和学习中经常用到的一些Chrome浏览器插件分享给大家,随便一个都能提高你的“生活品质”和工作效率。MarkdownHereMarkdownHere可以让你更愉快的写邮件,由于支持Markdown直接转电子邮…

    2022年6月10日
    25
  • windowsform_winform拖动控件

    windowsform_winform拖动控件
    ControlFindControl(stringcontrolName,ControlfatherControl){foreach(ControlcinfatherControl.Controls){if(c.Name==controlName){returnc;}}returnnull;}

    2022年10月19日
    0
  • potplayermadvr设置_potplayerhdr设置

    potplayermadvr设置_potplayerhdr设置Potplayer+LAV+madVR+Xysubfilter配置指南Potplayer作为Windows上很受欢迎的一款播放器,公认的最佳配置为结合LAV、madVR、XySubfilter进行使用。本文将介绍一种对其简单配置的方法。LAV:一套主流的开源解码filtermadVR:一个高性能的视频渲染器XySubfilter:madVR专用的字幕插件关于如何设置…

    2022年9月14日
    0
  • Pycharm提示 Unresolved reference 的解决办法[通俗易懂]

    Pycharm提示 Unresolved reference 的解决办法[通俗易懂]有时候a.py和b.py在一个目录里面,但是在a.py种写importb有时会提示Unresolvedreference,Pycharm常见,解决办法是setting->Project->Projectstructure->Source,点击要加入的文件夹.注意:添加成功之后该文件见的图标会编程蓝色(加入之前是淡蓝色中间一个圆圈)如上图所示。…

    2022年8月27日
    2
  • Debug.WriteLine输出调试信息[通俗易懂]

    Debug.WriteLine输出调试信息转载于:https://www.cnblogs.com/xuyuchen/p/8283023.html

    2022年4月10日
    99

发表回复

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

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