慢慢人生路,学点Jakarta基础-深入剖析Java的接口和抽象类
在java面向对象编程的,抽象类和接口始终存在有疑问的地方,因为两者太多相似有太多不同,在刚开始学习的时候经常弄的不对,使用情景搞混,今天来总结之前学习Java中接口和抽象类的问题。
抽象类
了解:只声明,未具体实现。
abstract void cry();
抽象方法必须使用关键字abstract进行修饰,如果一旦一个类中包含了abstract方法,那么这个类必须使用abstract进行修饰;因为抽象类中含有未实现的方法,抽象类不能被实例化;抽象类不一定包含抽象方法,也就是说抽象类可以没有抽象方法(那么这个抽象类为什么要设计呢?);抽象方法不能存在方法体;抽象类可以有实现了的方法当一类继承的父类是抽象类时,必须全部实现抽象类的抽象方法。
对于一个父类,如果它的某个方法在父类中实现出来没有任何意义,必须根据子类的实际需求来进行不同的实现,那么就可以将这个方法声明为abstract方法,此时这个类也就成为abstract类了。
包含抽象方法的类称为抽象类,但并不意味着抽象类中只能有抽象方法,它和普通类一样,同样可以拥有成员变量和普通的成员方法。注意,抽象类和普通类的主要有三点区别:
1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。
2)抽象类不能用来创建对象;
3)如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。
接口
设计思想:高内聚低耦合
[public] interface InterfaceName {
}
使用implement关键字遵循接口:
class Animalimplements Interface1,Interface2,[....]{
}
当一类实现多个接口时,如果此类事非抽象类那么必须实现该接口的全部方法;
原则:
当一类实现了一个接口,就要实现此接口的全部方法;
接口不能被实例化(正是由于接口的变量不能用private protected修饰,默认 public static final,而方法被隐式地指定为public abstract方法用其他关键字,比如private、protected、static、 final等修饰会报编译错误))
接口中所有方法不能有方法体,也就是说必须是抽象方法;
定义在接口中的变量,作为全局变量使用:访问形式 接口名.变量名。
接口不能继承类,但是可以继承其他的接口。
两者对比
一个类只能单继承一个抽象类。但是一个类可以实现多个接口。
成员变量:抽象类可以是任何类型,接口只能是public static final类型。
成员方法:抽象类可以提供实现的方法体,接口中只能存在public abstract 方法。
静态方法|代码块:接口中不存在,抽象类可以有。
小结
Java的继承是单继承,这种机制能够保证类的纯洁性,比C++的多继承机制简介。但是不可否认对子类的扩展有一定的影响,因此实现接口可以看做是对继承的一种补充。还有一点就是继承是层级式的,不太灵活。当修改其中某各类可能打破这种继承的平衡,而接口没有这样的麻烦,因为他只针对实现接口的类起作用。实现接口可在不打破继承关系的前提下,对某各类功能扩展,非常灵活。
慢慢人生路,学点Jakarta基础-深入剖析Java的接口和抽象类的更多相关文章
- 漫漫人生路-学点Jakarta基础-Java8新特性 Stream/Lambda
背景 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利.高效的聚合操作(aggregate operation),或者大批量数据操作 (bulk dat ...
- 慢慢人生路,学点Jakarta基础-JavaDoc标记
本文对使用Maven工程构建Jenkinsjob时遇到的问题进行一下分析汇总. JavaDoc标记使用问题 一般Maven项目都有配置产生Java DOC,但是在Jenkins里面产生DOC会有一些严 ...
- 慢慢人生路,学点Jakarta基础-集合类
动态改变内存 因为数组在存储之前需要先申请一块连续的内存空间并且在编译的收就必须确定好它的空间大小,在运行时控件的大小无法再随着需求的改变而改变,极易出现越界的情况,数据少时又会造成内存空间浪费. 主 ...
- 漫漫人生路,学点Jakarta基础-重写(覆盖)、重载
首先我们现在开始进入Jakarta的时代,由原甲骨文易主到 Eclipse基金会下,但是不想舍弃java名字,因此基金会重新投票选出了Jakarta EE(雅加达).但是我们明白换汤汤不换药的道理,基 ...
- 漫漫人生路,学点Jakarta基础-Java8函数式编程
接口默认方法 Java8版本以后新增了接口的默认方法,不仅仅只能包含抽象方法,接口也可以包含若干个实例方法.在接口内定义实例方法(但是注意需要使用default关键字) 在此定义的方法并非抽象方法,而 ...
- Java基础——深入剖析Java中的装箱和拆箱
(转自:http://www.cnblogs.com/dolphin0520/p/3780005.html) 自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若 ...
- JAVA基础之——三大特征、接口和抽象类区别、重载和重写区别、==和equals区别、JAVA自动装箱和拆箱
1 java三大特征 1)封装:即class,把一类实体定义成类,该类有变量和方法. 2)继承:从已有的父类中派生出子类,子类实现父类的抽象方法. 3)多态:通过父类对象可以引用不同的子类,从而实现不 ...
- 学多少年才算“精通Java”?
我从毕业做程序员就开始用 Java,到现在已经工作快 20 年了.减去我做手游用 C++.Lua 的几年,再减去后来转管理写代码少的时间,我真正写 Java 代码的时间至少也在 10 年以上. 如果你 ...
- 小白学Docker之基础篇
系列文章: 小白学Docker之基础篇 小白学Docker之Compose 小白学Docker之Swarm PS: 以下是个人作为新手小白学习docker的笔记总结 1. docker是什么 百科上的 ...
随机推荐
- 学以敩(xiao,效)为敎,以见为觉。醒悟、明白。
学以敩(xiao,效)为敎,以见为觉.醒悟.明白 上半部分中间的爻是算筹,在古时被用来记数和计算:两边是手,既表示手把手传授,双手也表恭敬与专注:中间是一座房子,表示教学和学习的地方,这个地方不用豪华 ...
- tensorflow 1 - 起步
使用图 (graph) 来表示计算任务. 在被称之为 会话 (Session) 的上下文 (context) 中执行图. 使用 tensor 表示数据. 通过 变量 (Variable) 维护状态. ...
- MPI对道路车辆情况的Nagel-Schreckenberg 模型进行蒙特卡洛模拟
平台Ubuntu 16.04,Linux下MPI环境的安装见链接:https://blog.csdn.net/lusongno1/article/details/61709460 据 Nagel-Sc ...
- sed命令的介绍
命令格式 sed [options] 'command' file(s) sed [options] -f scriptfile file(s) 选项 -e<script>或--expre ...
- Android通过XML来定义Menu
直接在代码中添加菜单项,给菜单项分组等,这是比较传统的做法,它存在着一些不足.比如说,为了响应每个菜单项,我们需要用常量来保存每个菜单项的ID等.为此,Android提供了一种更好的方式,就是把men ...
- 玩具(toy)
题目 试题2:玩具(toy) 源代码:toy.cpp 输入文件:toy.in 输出文件:toy.out 时间限制:1s 空间限制:256MB 题目描述 商店正在出售小C最喜欢的系列玩具,在接下来的n周 ...
- 使用spring-loaded开源项目,实现java程序和web应用的热部署
JDK1.5之后提供了java.lang.instrument.Instrumentation,即java agent机制可以实现类的redefinition和retransform. redefin ...
- iOS多线程与网络开发之多线程GCD
郝萌主倾心贡献,尊重作者的劳动成果.请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠.支持郝萌主.捐赠数额任意.重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 游戏官方下 ...
- File的getPath()和getAbsolutePath()和getCanonicalPath()的差别
这几个方法是有一次无意的发现,我当时也不知道什么意思,就百度了,查到了一些列子: 原文地址http://www.blogjava.net/dreamstone/archive/2007/08/08/1 ...
- 数据格式转换 (三)Office文档转HTML
HTML Filter 是由北京红樱枫软件有限公司根据HTML Ver 4.01/CSS式样,研制和开发的MS Office系列文档到HTML转换的通用程序库.便于用户实现对多种文档的统一管 ...