慢慢人生路,学点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++的多继承机制简介。但是不可否认对子类的扩展有一定的影响,因此实现接口可以看做是对继承的一种补充。还有一点就是继承是层级式的,不太灵活。当修改其中某各类可能打破这种继承的平衡,而接口没有这样的麻烦,因为他只针对实现接口的类起作用。实现接口可在不打破继承关系的前提下,对某各类功能扩展,非常灵活。
转载于:https://www.cnblogs.com/mm15732621582/p/8543660.html
慢慢人生路,学点Jakarta基础-深入剖析Java的接口和抽象类相关推荐
- 如何学IT?零基础入门自学Java编程系列:java简介跟计算机常识
学习Java我们应该懂的一些常识 作为IT人士,那什么叫IT呢? 即信息技术,主要用于管理和处理信息所采用的各种技术的总称.IT业务是很广的.比如经历了最早一批大型机发展到PC电脑端,再到互联网高速发 ...
- ~这些年,我们一起学过的Java~04~接口与抽象类
考试结束后,终于开始继续学习Java,前面部分忘了不少,果然印证了那句熟透了的习语:三天不做手生,三天不练口生.本来昨天熊哥上的接口与事件,但是事件那部分内容我真心木有听进去,到后面太困了,处于又饿又 ...
- 从零开始学 Python 之基础篇
从零开始学 Python 之基础篇 前言 大家好,这里是「痴海」从零开始学习 Python 系列教程.此文首发于「痴海」公众号,欢迎大家去关注.学习一门语言最好的办法,就是教懂别人.在这公众号,我会从 ...
- 简单介绍三个C语言图形库C语言其实最擅长的是写纯数据处理的程序 . 非得用C语言写个界面程序那将会变得很困难 . 我刚开始学C语言就是从hello world 开始的 , 后来慢慢开始学从三个数中找
C语言其实最擅长的是写纯数据处理的程序 . 非得用C语言写个界面程序那将会变得很困难 . 我刚开始学C语言就是从hello world 开始的 , 后来慢慢开始学从三个数中找出最大值 , 和对数组进行 ...
- 0基础学java培训_零基础可以学习java课程么?零基础java培训需要多久?
零基础可以学习java课程么? 第一.兴趣爱好是重要,总体目标很重要 在你学习培训java以前,一定要清晰自身对java是不是确实很感兴趣,還是一时头昏脑涨.终究学习培训java不仅要把握技术性,也要 ...
- 学画画要从什么开始学?零基础怎么学好画画?
本文由"学美术上美术集网校"原创,图片素材来自网络,仅供学习分享 学画画要从什么开始学?零基础怎么学好画画?几乎每天都会有小伙伴问我:我是零基础,想学画画,应该怎么开始?多久能画得 ...
- 零基础学怎么学Java_零基础学java难么?怎么自学?
在计算机发展迅速的今天,越来越多的人去学习编程,其中Java就是大家热衷的语言之一.这时候就有人问,零基础学java难么?下面小编将回答这一问题并给出学习路线. 小编想说,这个实际上要看个人能力以及前 ...
- 新疆银行招聘计算机,新疆2017年银行招聘考试计算机学_计算机基础试题(19页)-原创力文档...
.专业 .专注 . 新疆 2017 年银行招聘考试计算机学 :计算机基础试题 本卷共分为 1 大题 50 小题 ,作答时间为 180 分钟 ,总分 100 分 , 60 分及格 . 一 . 单项选择题 ...
- python基础知识整理-整理了27个新手必学的Python基础知识点
原标题:整理了27个新手必学的Python基础知识点 1.执行脚本的两种方式 Python a.py 直接调用Python解释器执行文件 chomd +x a.py ./a.py #修改a.py文件的 ...
最新文章
- 十大机器智能新型芯片:华为抢占一席,Google占比最多
- 汇编语言随笔(14)-直接定址表、检测点16和实验16
- 四十二、开始Vuex的学习:如何在Vue中使用Vuex
- Go并发编程里的数据竞争以及解决之道
- Python爬虫实战02:分析Ajax请求并抓取今日头条街拍
- 我的家乡河北涿州岐沟村(岐沟关)
- PHP之字符串常用函数
- excel英文大小写转换
- 思科下一代模拟器EVE-NG做一个思科交换机用作DHCP服务器实验
- Kubernetes 健康状态检查liveness和readiness
- python数列_Python斐波拉契数列
- 港中文、佐治亚理工招收AI博士生
- 「spacingjs-1.0.7」,点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载,极速在线查看享用。 链接:https://www.aliyundrive.com/s/a87tt
- iOS 微信分享,返回自己的app 闪退
- 小米手机手机远行linux,Ubuntu的Android Studio调试小米手机的方法
- excel设置行高和列宽
- 100天精通Python(基础篇)——第26天:lambda表达式基础+代码实战
- 华强北耳机值得买吗?质量怎么样?靠谱吗?深度拆解悦虎二代1562m耳机!
- lim[(n!)^(1/n)]/n的极限
- Python+MATLAB处理气象站点数据