抽象类

思考下面程序潜在的问题

交通工具中定义了4个方法,其中行驶方法内部会依次调用启动、加速、停止方法。由于不同的交通工具,启动的方式差异很大,所以交通工具类中并不实现该方法,而是将其交给子类实现。

上述代码的问题,在于父类无法强制子类重写启动方法。一旦子类没有重写该方法,那么驾驶员调用行驶方法时,将出现不合理的运行结果。

解决方案

可以在父类的启动方法上增加abstract关键字,届时子类就必须重写该方法了,否则程序无法编译通过。当父类中有了抽象方法时,也必须在类上增加abstract关键字,将类声明为抽象类。

小结采用abstract关键字修饰的类叫抽象类。

采用abstract关键字修饰的方法叫抽象方法,抽象方法不能有方法体。

抽象类中可以没有抽象方法,但是包含抽象方法的类必须声明为抽象类。

子类若是抽象类,可以不实现父类的抽象方法,否则必须实现父类的抽象方法。

抽象类有构造方法,可以在子类中调用,但不能调用它实例化抽象类。

接口

思考下面需求带来的问题

如下图,人驾驶的参数为交通工具,而交通工具的子类有小汽车、船、马。现在要为人增加一个居住的方法,该方法的参数应该是居所,包括房子、山洞、小汽车、船这些可以遮风挡雨的环境,显然居所应该包括一个遮挡的方法。如果直接在交通工具上增加此方法,显然不合适,因为房子、山洞和交通工具没关系。如果再创建一个居所的父类,又无法被小汽车、船继承,因为它们已经有了一个父类。

解决方案

接口恰恰可以解决此类问题,因为接口支持多实现,即一个类可以实现任意多个接口,即便是有了父类也可以。我们可以定义一个居所接口,让小汽车、船来实现它,从而具备遮挡的能力。也可以让房子、山洞等任何物体实现它,一样具备遮挡的能力。

再来一个需求

想一想,如果想给人再加一个拉雪橇的方法怎么办?拉雪橇时需要传入拉雪橇的劳力,它可以是狗、马、小汽车。其中小汽车、马已经有了父类,所以它们无法和狗共用一个父类。

解决方案

依然可以用接口解决问题,我们可以定义雪橇机接口,让小汽车、马实现它,也可以让狗等任何能拉雪橇的物体实现它,从而具备拉雪橇的能力。

小结

采用interface关键字定义接口,接口中的方法均为抽象方法。接口中的方法可以省略abstract关键字。

接口中可以定义属性,该属性须在定义时就初始化,并且不可修改。

接口可以继承于多个接口,但不能继承于类。

接口的实现类若不是抽象类,就必须实现接口中所有的方法。

作业模拟开发一款动物探险游戏,定义如下的类。定义抽象的动物类,增加抽象的“吃”方法。

定义猫、狗、鼠类,继承于动物类,分别实现吃方法,方法内打印信息形如“猫爱吃鱼!”。

定义人类,增加喂养方法,参数为动物。

开发游戏程序,在main方法中依次创建猫、狗、鼠、人对象,并调用人的喂养方法,依次喂养猫、狗、鼠。

2.完善动物探险游戏。定义探测者接口,增加探测方法。

让狗类、鼠类实现探测者接口,探测方法内打印信息如“狗擅长探测!”。

在人类中增加搜索方法,传入参数为探测者接口。搜索方法内调用该接口的探测方法即可。

在main方法中调用人的搜索方法2次,分别传入狗、鼠。

java 接口工程_Java工程师(15)抽象类与接口相关推荐

  1. java中抽象类 接口_java中的抽象类与接口

    1.抽象类的定义 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类. 2.简单实例 ...

  2. 西安慧点科技Java基础笔试_java工程师基础笔试题(一)-参考答案

    一.选择和填空  (不定项哦!) 1,如下是一份文件名为Test2.java的源文件,请问,编译该文件之后会生成几份字节码文件 class Test{ class Inner{} static cla ...

  3. 测试私有方法_Java基础之抽象类、接口作为方法参数和返回值

    不同修饰符使用细节 常用来修饰类.方法.变量的修饰符 public 权限修饰符,公共访问, 类,方法,成员变量 protected 权限修饰符,受保护访问, 方法,成员变量 默认什么也不写 也是一种权 ...

  4. Java 高级类(上) —— 抽象类和接口

    在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类. 抽象类往往用来表征我们在对问题 ...

  5. JAVA类定义,成员类,抽象类及接口类

    对于class定义,格式如下: [public|protected|private] [abstract|final] class 类名 { //类的内容 .... } 前面是modifier. 需要 ...

  6. Java核心编程总结(二、抽象类与接口),linux音频驱动架构

    抽象类不能创建对象,如果创建,编译无法通过而报错 理解:假设创建了抽象类的对象,调用抽象方法,抽象方法没有方法体,无法执行 抽象类一定有而且是必须有构造器,是提供给子类创建对象时,初始化父类成员使用的 ...

  7. Java知识点总结【6】抽象类和接口

    1.抽象类 1)什么是抽象类 抽象的反义词是具体,越不具体,就越抽象.abstract修饰的类就叫做抽象类,除了不能被实例化之外!其他语法规则和普通类都一样. abstract关键字存在的意义,就是让 ...

  8. java学习第八天继承,抽象类,接口

    日期:2019年11月13日 1.子父类中的构造函数的特点: 在子类构造对象时发现,访问子类构造函数时,父类构造函数也运行了.为啥? 答:在子类的构造函数中第一行默认的隐式语句,super(); ** ...

  9. Java 基础巩固:再谈抽象类和接口

    文章出自:安卓进阶学习指南 主要贡献者: Milo Struggle shixinzhang 读完本文你将了解: 背景介绍 什么是抽象类和接口 特点与区别 抽象类的特点 接口的特点 栗子 小结 如何选 ...

最新文章

  1. Spring+SpringMVC+MyBatis深入学习及搭建(十)——MyBatis逆向工程
  2. Haproxy 让后端RS记录真实IP
  3. pads中如何设置等长_期货如何设置止损止盈避免交易中被套-期货学习
  4. unity导入素材时材质丢失素材变成粉红色的解决方法
  5. ES6之路第十三篇:Iterator和for...of循环
  6. Hive Performance 学习笔记
  7. java 企业号 临时素材_查看“获取临时素材文件”的源代码
  8. mysql 5.7多层级json查询_MySql5.7 json查询
  9. 扎心!新浪年度报告:90后程序员月薪2万,没女朋友
  10. 四川2021年5月计算机二级报名时间,四川2021年3月计算机等级考试什么时候报名...
  11. Matlab循环语句
  12. 朱松纯:三读《赤壁赋》,并从人工智能的角度解读“心”与“理”的平衡
  13. html 实现页面加载进度,网页加载进度条实现方案
  14. 天线设计相关性能参数
  15. 网页上怎么查询服务器地址,怎么查看一个网页的服务器地址
  16. 设备管理 android问号,设备管理器里有问号怎么办
  17. [Pytorch图像分类全流程实战]Task06:可解释性分析
  18. 知乎上这个话题引起了我的兴趣:在实体经济一片下滑的大环境中,哪些行业还可以?
  19. 互联网成数据宝库,网络数据采集技术推动人工智能发展
  20. readb(), readw(), readl(),writeb(), writew(), writel() 宏函数

热门文章

  1. 16.1、python初识面向对象(1)
  2. 【Python】向函数传递任意数量的实参
  3. javascript a 标签打开相对路径,绝对路径
  4. AutoFac Ioc依赖注入容器
  5. 34.TokenInterceptor防止表单重复提交
  6. [LeetCode]题解(python):150-Evaluate Reverse Polish Notation
  7. 8个免费实用的C++GUI库
  8. 批处理解决“易语言难题”
  9. Kruskal算法 - C语言详解
  10. Angular http跨域