在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的接口和抽象类相关推荐

  1. 如何学IT?零基础入门自学Java编程系列:java简介跟计算机常识

    学习Java我们应该懂的一些常识 作为IT人士,那什么叫IT呢? 即信息技术,主要用于管理和处理信息所采用的各种技术的总称.IT业务是很广的.比如经历了最早一批大型机发展到PC电脑端,再到互联网高速发 ...

  2. ~这些年,我们一起学过的Java~04~接口与抽象类

    考试结束后,终于开始继续学习Java,前面部分忘了不少,果然印证了那句熟透了的习语:三天不做手生,三天不练口生.本来昨天熊哥上的接口与事件,但是事件那部分内容我真心木有听进去,到后面太困了,处于又饿又 ...

  3. 从零开始学 Python 之基础篇

    从零开始学 Python 之基础篇 前言 大家好,这里是「痴海」从零开始学习 Python 系列教程.此文首发于「痴海」公众号,欢迎大家去关注.学习一门语言最好的办法,就是教懂别人.在这公众号,我会从 ...

  4. 简单介绍三个C语言图形库C语言其实最擅长的是写纯数据处理的程序 . 非得用C语言写个界面程序那将会变得很困难 . 我刚开始学C语言就是从hello world 开始的 , 后来慢慢开始学从三个数中找

    C语言其实最擅长的是写纯数据处理的程序 . 非得用C语言写个界面程序那将会变得很困难 . 我刚开始学C语言就是从hello world 开始的 , 后来慢慢开始学从三个数中找出最大值 , 和对数组进行 ...

  5. 0基础学java培训_零基础可以学习java课程么?零基础java培训需要多久?

    零基础可以学习java课程么? 第一.兴趣爱好是重要,总体目标很重要 在你学习培训java以前,一定要清晰自身对java是不是确实很感兴趣,還是一时头昏脑涨.终究学习培训java不仅要把握技术性,也要 ...

  6. 学画画要从什么开始学?零基础怎么学好画画?

    本文由"学美术上美术集网校"原创,图片素材来自网络,仅供学习分享 学画画要从什么开始学?零基础怎么学好画画?几乎每天都会有小伙伴问我:我是零基础,想学画画,应该怎么开始?多久能画得 ...

  7. 零基础学怎么学Java_零基础学java难么?怎么自学?

    在计算机发展迅速的今天,越来越多的人去学习编程,其中Java就是大家热衷的语言之一.这时候就有人问,零基础学java难么?下面小编将回答这一问题并给出学习路线. 小编想说,这个实际上要看个人能力以及前 ...

  8. 新疆银行招聘计算机,新疆2017年银行招聘考试计算机学_计算机基础试题(19页)-原创力文档...

    .专业 .专注 . 新疆 2017 年银行招聘考试计算机学 :计算机基础试题 本卷共分为 1 大题 50 小题 ,作答时间为 180 分钟 ,总分 100 分 , 60 分及格 . 一 . 单项选择题 ...

  9. python基础知识整理-整理了27个新手必学的Python基础知识点

    原标题:整理了27个新手必学的Python基础知识点 1.执行脚本的两种方式 Python a.py 直接调用Python解释器执行文件 chomd +x a.py ./a.py #修改a.py文件的 ...

最新文章

  1. 十大机器智能新型芯片:华为抢占一席,Google占比最多
  2. 汇编语言随笔(14)-直接定址表、检测点16和实验16
  3. 四十二、开始Vuex的学习:如何在Vue中使用Vuex
  4. Go并发编程里的数据竞争以及解决之道
  5. Python爬虫实战02:分析Ajax请求并抓取今日头条街拍
  6. 我的家乡河北涿州岐沟村(岐沟关)
  7. PHP之字符串常用函数
  8. excel英文大小写转换
  9. 思科下一代模拟器EVE-NG做一个思科交换机用作DHCP服务器实验
  10. Kubernetes 健康状态检查liveness和readiness
  11. python数列_Python斐波拉契数列
  12. 港中文、佐治亚理工招收AI博士生
  13. 「spacingjs-1.0.7」,点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载,极速在线查看享用。 链接:https://www.aliyundrive.com/s/a87tt
  14. iOS 微信分享,返回自己的app 闪退
  15. 小米手机手机远行linux,Ubuntu的Android Studio调试小米手机的方法
  16. excel设置行高和列宽
  17. 100天精通Python(基础篇)——第26天:lambda表达式基础+代码实战
  18. 华强北耳机值得买吗?质量怎么样?靠谱吗?深度拆解悦虎二代1562m耳机!
  19. lim[(n!)^(1/n)]/n的极限
  20. Python+MATLAB处理气象站点数据

热门文章

  1. vue 表单 input checkbox
  2. vue.js 组件基础
  3. vSphere 7 Kubernetes 初体验
  4. 压测学习总结(5)——如何使用Jmeter 进行简单的并发操作
  5. App后台开发运维和架构实践学习总结(13)——OAuth 2.0 概述流程理解
  6. App后台开发运维和架构实践学习总结(8)——后台产品设计的4个原则
  7. Maven学习总结(1)——Maven入门
  8. centos sftp客户端 c 源码_Redis第3课:如何使用 Redis客户端
  9. 中国强制应用市场下架所有非认证开发者提交的应用
  10. IOS中JSON数据的解析