了解抽象类和接口----------【Java基础】
抽象类
抽象是从具体中抽取出具有类似规律;
所以它和普通类是有区分的:
1、它本身不能被实例化,但是其子类可以。
2、普通类不能有抽象方法,但抽象类可以不仅有抽象的,还可以有非抽象的成员变量和成员方法。
3、某个类继承了一个抽象类,那么该类必须实现其抽象类的抽象方法,如果不实现,则该类必须使用abstact修饰,也就作为一个抽象类而存在。
接口
它是一个比抽象类更为抽象的“类”。同时你可以把它看做一个类与类之间的协议。
因为类使用某个接口,它仅需要知道该接口有哪些方法,仅此而已。因为它需要自己实现方法体,在规定好的方法内(方法名、参数列表、返回类型)。
还需要注意的是,它不仅是一个极度抽象的类;因为它的创建还允许创建一个能被向上转型为多种基类的类型。
还有一点需要注意的是,修饰符的种类和范围与类的基本一致。
当然这只是理论上的,如果是在具体实现代码的时候,就需要注意一些规范:
1、接口中所有方法都是抽象的,也就是说方法会被隐式地指定为public abstact 方法(){},常量会被隐式地指定为public static final 常量。
2、一个类可以有多个接口;如果是非抽象类,就必须实现接口中的所有抽象方法;否则,使用接口的类就只能是抽象类了。
参考资料:Java编程思想
抽象类和接口的区别:
①抽象类被继承用extends,接口被实现用implements,继承是单继承,实现可以是多实现,每个接口之间用逗号分开。
②抽象类里可以没有抽象方法,可以实现部分方法,而接口里全是抽象方法。
③抽象类里可以定义变量,可以有静态方法和静态代码块,接口内只能定义常量,不能有静态代码块和静态方法,没有变量的说法,里面的只有public static final修饰的常量。
④抽象类除了不能用private修饰,另外的三个访问修饰符都可以,接口只能用public访问修饰符修饰。
⑤接口比抽象类更抽象,所以接口比抽象类编程更灵活。
⑥当关注一个事物的本质的时候,用抽象类,当关注一个操作的时候,用接口。
语法层次
抽象类方式中,抽象类可以拥有任意范围的成员数据,同时也可以拥有自己的非抽象方法,但是接口方式中,它仅能够有静态、不能修改的成员数据(但是我们一般是不会在接口中使用成员数据),同时它所有的方法都必须是抽象的。在某种程度上来说,接口是抽象类的特殊化。
对子类而言,它只能继承一个抽象类(这是java为了数据安全而考虑的),但是却可以实现多个接口。
设计层次
1、 抽象层次不同。抽象类是对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。
2、 跨域不同。抽象类所跨域的是具有相似特点的类,而接口却可以跨域不同的类。我们知道抽象类是从子类中发现公共部分,然后泛化成抽象类,子类继承该父类即可,但是接口不同。实现它的子类可以不存在任何关系,共同之处。例如猫、狗可以抽象成一个动物类抽象类,具备叫的方法。鸟、飞机可以实现飞Fly接口,具备飞的行为,这里我们总不能将鸟、飞机共用一个父类吧!所以说抽象类所体现的是一种继承关系,要想使得继承关系合理,父类和派生类之间必须存在"is-a" 关系,即父类和派生类在概念本质上应该是相同的。对于接口则不然,并不要求接口的实现者和接口定义在概念本质上是一致的, 仅仅是实现了接口定义的契约而已。
3、 设计层次不同。对于抽象类而言,它是自下而上来设计的,我们要先知道子类才能抽象出父类,而接口则不同,它根本就不需要知道子类的存在,只需要定义一个规则即可,至于什么子类、什么时候怎么实现它一概不知。比如我们只有一个猫类在这里,如果你这是就抽象成一个动物类,是不是设计有点儿过度?我们起码要有两个动物类,猫、狗在这里,我们在抽象他们的共同点形成动物抽象类吧!所以说抽象类往往都是通过重构而来的!但是接口就不同,比如说飞,我们根本就不知道会有什么东西来实现这个飞接口,怎么实现也不得而知,我们要做的就是事前定义好飞的行为接口。所以说抽象类是自底向上抽象而来的,接口是自顶向下设计出来的。
参考博文:java提高篇(四)-----抽象类与接口、深入理解Java的接口和抽象类
了解抽象类和接口----------【Java基础】相关推荐
- 使用抽象类还是接口(Java)
"要针对接口编程,不要针对实现编程."那么,在java的世界里,这里的接口指的是什么呢?无非是以下两种实现方式: 方式1)抽象类(只能有一个超类) 方式2)接口Interface( ...
- NO.16 沙场秋点兵:类vs抽象类vs接口 | Java敲黑板系列
开场白 老铁 :接口.抽象类.类--三位英雄执剑走天涯,行侠仗义,被誉为"Java帝国三剑客".三位英雄从来都不会争强好胜,而是相互协助,发挥各自优势,共同打造Java帝国的强安全 ...
- Java 的抽象特性:抽象类与接口深度解析
要点: 抽象类 接口 抽象类与接口的差别 一. 抽象 对于面向对象编程来说,抽象是它的四大特征之中的一个. 在Java中,能够通过两种形式来体现OOP的抽象:接口和抽象类. 接口和抽象类为我们提供了一 ...
- Java学习系列之抽象类和接口的区别和联系
导读 本文首先分别介绍抽象类和接口的基础概念.特征和应用场景,然后介绍其区别和联系. 1 抽象类 1.1 定义抽象类 在Java中被abstract关键字修饰的类称为抽象类,被abstract关键字修 ...
- Java复习之抽象类和接口
Java复习之抽象类和接口 Java复习之抽象类和接口 什么是抽象类和接口 抽象类与接口的区别 什么情况下使用抽象类或接口 一个demo引起来的对于java方法区堆栈的研究 首先我们需要明白抽象类与接 ...
- 简单的介绍一下怎样如何学习Java基础
在我看来,学习Java最好的方式就是通过书籍(或博客)+动手写代码,辅以视频,通过多写多练,达到熟练掌握的程度.博主曾经看过一篇文章,讲的是费曼学习法,其中讲到学习的四个步骤:选择目标.教学.纠错学习 ...
- java基础(六)多线程/设计模式
这辈子没办法做太多事情,所以每一件都要做到精彩绝伦! People can't do too many things in my life,so everything will be wonderfu ...
- 【读书笔记】Java基础学习之目录
前述 :本人目前正在学习java,开发Android应用,因此重新来把java学习一遍. 本文所有资料来源于互联网,我将根据自己的学习进度,不断的将资料整合,就当作是读书笔记吧! 本文作为目录页,将不 ...
- 第一阶段>>>Java基础进阶 OOP/Reflect/注解/IO流/API核心
目录 >>>java基础01-结构以及类型 >>>java基础02-初识数组 >>>java基础03-面向对象OOP >>>ja ...
- Java 基础知识总结(附PDF文档)
您好!我是岛上程序猿,感谢您阅读本文,欢迎一键三连哦. 这篇基础知识总结包括六个章节,可以下载保存后慢慢看,希望对您有帮助! https://download.csdn.net/download/m0 ...
最新文章
- 老版本的Spring应用该如何应对这次的RCE漏洞?
- 能进这个Java组织的都是大神,现在只有三个中国人
- Apache 反向代理,Laravel获取用户真实IP
- (23/24) webpack实战技巧:如何在webpack环境中使用Json
- WAMP PHP开发环境
- php反选全选代码,jQuery中实现全选,反选实例代码 (推荐)
- 写这么骚的代码,真不怕被同事揍么?
- iOS - LocalNotification
- 免费搭建私人云盘+内网渗透+不限速无限存储
- 【Taro开发】-自定义导航栏NavBar(五)
- WorkNC编程软件配套英格索尔高速铣刀帮助奥迪加工
- 视频会议服务器维护,视频会议系统一般故障与应对措施
- zblog html代码,简单快速修改zblog模板的重要代码
- 鼠标滚轮事件onmouewheel
- /bin/bash^M: 坏的解释器: 没有那个文件或目录
- 鸿蒙开发板Hi3861模拟SPI驱动JLX12864_LCD(UC1701X)_基于code-2.0
- Windows自启动方式完全总结
- #计算机应用与技巧分享 #应用推荐 #录屏 Captura 免费开源的屏幕录制工具
- 格式转换——bmp 2 yuv
- 产品管理精华:第三,需求调研,从用户出发
热门文章
- 传腾百联投马可波罗,突袭阿里后院
- Java实现 蓝桥杯VIP 算法提高 3-3求圆面积表面积体积
- 连续系统的时域分析(一)LTI连续系统微分方程解法1——y(0 +)的求法
- java 职级评定申报_职位等级评价方法(职级评价法)
- 问道手游安卓服务器维护公告,问道手游安卓服务器11月17日维护公告
- 答题小程序支付开通会员设计
- 弘辽科技:淘宝存在严重违规无法开店应该怎么办?
- 恢复Win10中缺少的电源计划
- matlab打靶法程序,打靶法(含Mtlab程序).doc
- 定位ListView到指定的某一个条目