抽象类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)


相关推荐

  • 使用vue-cli创建项目_vuecli3教程

    使用vue-cli创建项目_vuecli3教程vue-cli创建项目上一篇我们安装了vue-cli,接下来我们就使用该脚手架进行创建项目1.进入一个目录,创建项目创建项目命令如下:vuecreate<ProjectName&g

  • checklistbox实现单选

    checklistbox实现单选

  • 狂神说java系列笔记下载(跟狂神相似的小说)

    狂神说Vue笔记​ 想要成为真正的“互联网Java全栈工程师”还有很长的一段路要走,其中前端是绕不开的一门必修课。本阶段课程的主要目的就是带领Java后台程序员认识前端、了解前端、掌握前端,为实现成为“互联网Java全栈工程师”再向前迈进一步。一、前端核心分析1.1、概述Soc原则:关注点分离原则Vue的核心库只关注视图层,方便与第三方库或既有项目整合。HTML+CSS+JS:视图:给用户看,刷新后台给的数据网络通信:axios页面跳转:vue-router状态管

  • 大数据治理平台建设规划方案

    大数据治理平台建设规划方案推荐阅读:世界的真实格局分析,地球人类社会底层运行原理不是你需要中台,而是一名合格的架构师(附各大厂中台建设PPT)企业IT技术架构规划方案论数字化转型——转什么,如何转?华为干部与人才发…

  • Maven私服如何上传jar包?看这里!

    Maven私服如何上传jar包?看这里!

  • 【Java面试】第一章:P5级面试

    HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们…

发表回复

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

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