java 接口工程_Java工程师(15)抽象类与接口
抽象类
思考下面程序潜在的问题
交通工具中定义了4个方法,其中行驶方法内部会依次调用启动、加速、停止方法。由于不同的交通工具,启动的方式差异很大,所以交通工具类中并不实现该方法,而是将其交给子类实现。
上述代码的问题,在于父类无法强制子类重写启动方法。一旦子类没有重写该方法,那么驾驶员调用行驶方法时,将出现不合理的运行结果。
解决方案
可以在父类的启动方法上增加abstract关键字,届时子类就必须重写该方法了,否则程序无法编译通过。当父类中有了抽象方法时,也必须在类上增加abstract关键字,将类声明为抽象类。
小结采用abstract关键字修饰的类叫抽象类。
采用abstract关键字修饰的方法叫抽象方法,抽象方法不能有方法体。
抽象类中可以没有抽象方法,但是包含抽象方法的类必须声明为抽象类。
子类若是抽象类,可以不实现父类的抽象方法,否则必须实现父类的抽象方法。
抽象类有构造方法,可以在子类中调用,但不能调用它实例化抽象类。
接口
思考下面需求带来的问题
如下图,人驾驶的参数为交通工具,而交通工具的子类有小汽车、船、马。现在要为人增加一个居住的方法,该方法的参数应该是居所,包括房子、山洞、小汽车、船这些可以遮风挡雨的环境,显然居所应该包括一个遮挡的方法。如果直接在交通工具上增加此方法,显然不合适,因为房子、山洞和交通工具没关系。如果再创建一个居所的父类,又无法被小汽车、船继承,因为它们已经有了一个父类。
解决方案
接口恰恰可以解决此类问题,因为接口支持多实现,即一个类可以实现任意多个接口,即便是有了父类也可以。我们可以定义一个居所接口,让小汽车、船来实现它,从而具备遮挡的能力。也可以让房子、山洞等任何物体实现它,一样具备遮挡的能力。
再来一个需求
想一想,如果想给人再加一个拉雪橇的方法怎么办?拉雪橇时需要传入拉雪橇的劳力,它可以是狗、马、小汽车。其中小汽车、马已经有了父类,所以它们无法和狗共用一个父类。
解决方案
依然可以用接口解决问题,我们可以定义雪橇机接口,让小汽车、马实现它,也可以让狗等任何能拉雪橇的物体实现它,从而具备拉雪橇的能力。
小结
采用interface关键字定义接口,接口中的方法均为抽象方法。接口中的方法可以省略abstract关键字。
接口中可以定义属性,该属性须在定义时就初始化,并且不可修改。
接口可以继承于多个接口,但不能继承于类。
接口的实现类若不是抽象类,就必须实现接口中所有的方法。
作业模拟开发一款动物探险游戏,定义如下的类。定义抽象的动物类,增加抽象的“吃”方法。
定义猫、狗、鼠类,继承于动物类,分别实现吃方法,方法内打印信息形如“猫爱吃鱼!”。
定义人类,增加喂养方法,参数为动物。
开发游戏程序,在main方法中依次创建猫、狗、鼠、人对象,并调用人的喂养方法,依次喂养猫、狗、鼠。
2.完善动物探险游戏。定义探测者接口,增加探测方法。
让狗类、鼠类实现探测者接口,探测方法内打印信息如“狗擅长探测!”。
在人类中增加搜索方法,传入参数为探测者接口。搜索方法内调用该接口的探测方法即可。
在main方法中调用人的搜索方法2次,分别传入狗、鼠。
相关文章:

为什么必须是final的呢?
一个谜团 如果你用过类似guava这种“伪函数式编程”风格的library的话,那下面这种风格的代码对你来说应该不陌生: 1 2 3 4 5 6 7 8 9public void tryUsingGuava() {final int expectedLength 4;Iterables.filter(Lists.newArrayList("123", &…

java mvc view_对Springmvc view层的理解
MVC框架可以把应用清晰明了地分为三个部分:Model层–数据层,View层–视图层,Controller–逻辑层,Model层负责整合数据,View层负责页面渲染,Controller层负责实现业务逻辑。我在这里简单说一下我对MVC框架中…

【优秀作业】粒子群算法
粒子群优化算法 一、概述 粒子群优化算法(Particle Swarm Optimization,PSO)的思想来源于对鸟捕食行为的模仿,最初,Reynolds.Heppner 等科学家研究的是鸟类飞行的美学和那些能使鸟群同时突然改变方向,分散…

面向对象进阶2 组合
2019独角兽企业重金招聘Python工程师标准>>> 一:命名空间 class Person:Country 中国人 # 静态变量print(Person.Country) alex Person() # 创建了一个空的命名空间 alex.name alex # 对象 alex.Country 泰国人 egon Person() egon.name ego…

Android基础知识之Manifest文件的组织结构
原文:http://android.eoe.cn/topic/android_sdk 是AndroidManifest.xml文件中的根标签,她必须包含一个标签和指定的xmlns:android、 package两个属性。 属性: xmlns:android定义了Android的命名空间。这个属性一般可以设置为:&quo…

java类的注释模板_IDEA添加Java类注释模版的方法
本文介绍了idea添加java类注释模版的方法,分享给大家,具体如下:idea版本:intellij idea 2017.2.5 x64eclipse能在类上方输入/**,回车添加类注释模版,但idea没有默认添加这个功能,需要做一些设置。下面介绍三…

POJ 2586 Y2K Accounting Bug(贪心)
题目连接:http://poj.org/problem?id2586 题意:某公司要统计全年盈利状况,对于每一个月来说,如果盈利则盈利S,如果亏空则亏空D。公司每五个月进行一次统计,全年共统计8次(1-5、2-6、3-7、4-8、5-9、6-10、…

【组队学习】10月份微信图文索引
10月份微信图文索引 一、组队学习相关 周报: Datawhale组队学习周报(第036周)Datawhale组队学习周报(第035周)Datawhale组队学习周报(第034周)Datawhale组队学习周报(第033周&…

java spring scope_如何在Spring中自定义scope的方法示例
大家对于 Spring 的 scope 应该都不会默认。所谓 scope,字面理解就是“作用域”、“范围”,如果一个 bean 的 scope 配置为 singleton,则从容器中获取 bean 返回的对象都是相同的;如果 scope 配置为prototype,则每次返…

学习ExtJS4 常用控件
ExtJS组件配置方式介绍 1.使用逗号分隔参数列表配置组件 首先来看一个简单的逗号分隔参数列表的例子。这个例子非常简单,它用来显示信息提示框。 2.使用Json对象配置组件 接下来看一个使用Json对象配置组件的例子,很多地方习惯性称之为配…

青少年编程竞赛交流群周报(第036周)
2021年10月31日(周日)晚20:00我们在青少年编程竞赛交流群开展了第三十六期直播活动。 一、直播内容 我们直播活动的主要内容如下: 讲解了上次测试中小朋友们做错的题目 Scratch青少年编程能力等级测试模拟题(四级)。…

中国电信打造“三朵云”战略 助力互联网+医疗发展
随着云计算、大数据的快速发展,全行业上云成为一个趋势,在健康医疗这个领域,应大势之趋,纷纷构建医疗云。近日,中国电信医疗云专区北京节点发布会在京顺利召开,会后北京电信副总经理项煌妹接受了中国IDC圈记…

python 数据类笔试题_一道 Python 类的笔试题详解
r {}class C(object):def __init__(self, a, b):self.a aself.b bif b a:orig super(C, cls)r[cls.instance] 1a C(1, a)b C(1, a)c C(1, b)l [a, b, c]for i in l:if i not in r:r[i] 1else:r[i] 1assert r[a] 2assert r[b] 2assert r[c] 1原题目要求如下&…

【优秀作业】粒子群算法(Python)
粒子群优化算法 一、概述 粒子群优化算法(Particle Swarm Optimization,PSO)的思想来源于对鸟捕食行为的模仿,最初,Reynolds.Heppner 等科学家研究的是鸟类飞行的美学和那些能使鸟群同时突然改变方向,分散…

警惕企业中的五种虚假执行力
第一种虚假执行力:无条件服从——只强调员工“服从”,不强调员工的智慧 很多人讲执行力,很喜欢强调员工的无条件服从。这种观念是OEM(代工生产)制造业时代的产物。实际上这是一种基于“规模制造”的虚假执行力,其本质是把人当成了…

真实记录疑似Linux病毒导致服务器 带宽跑满的解决过程
案例描述 由于最近我在重构之前的APP,需要和server端进行数据交互,发现有一个现象,那么就是隔1~2天总会发生获取数据超时的问题,而且必须要重启服务器才能解决。早在之前,我有留意到这个问题,但是由于这个服…

java集合总结_Java中集合总结
Java数组的长度是固定的,为了使程序能够方便地存储和操作数目不固定的一组数据,JDK类库提供了Java集合,这些集合类都位于java.util包中,但是与数组不同的是,集合中不能存放基本类型数据,而只能存放对象的引…

区块链基本解读
最近看着这个区块链,稍有新得,写下菜鸟自己的理解,希望大牛多多指点。 总体心得,如果互联网技术解决的是通讯问题的话,区块链技术解决的是信任问题。 下面举个日常例子:打赌 比如A和B赌石头是否为天然玉石&…

PDO防注入原理分析以及使用PDO的注意事项 (转)
我们都知道,只要合理正确使用PDO,可以基本上防止SQL注入的产生,本文主要回答以下两个问题: 为什么要使用PDO而不是mysql_connect? 为何PDO能防注入? 使用PDO防注入的时候应该特别注意什么? 一、为何要优先使用PDO? P…

LSGO软件技术团队招新 线下组队学习
团队招新 LSGO软件技术团队(Dreamtech算法组)成立于2010年09月,团队主要从事地理信息系统、管理信息系统、计算机视觉等领域的应用开发,团队同时具有培养学生的重要职能,毕业学生分布在IBM、百度、阿里、腾讯、京东、…

java spring 配置文件_[Java教程]Spring配置文件
[Java教程]Spring配置文件02016-03-19 00:00:08Spring配置文件是集成了Spring框架的项目的核心,引擎从哪里开始,中间都执行了哪些操作,小谈一下它的执行流程。容器先是加载web.接着是applicationContext.一种方法是加入ContextLoaderServlet这…
王子朝:一种高效且容错的方法用于协作车辆定位
王子朝是华北电力大学计算机系大四的学生,Dreamtech成员,参加了多期Dreamtech与Datawhale联合组织的组队学习活动,现保送西安电子科技大学深造。 这篇图文是他在线下组队学习时,为大家分享自己所看论文的总结。 希望参与我们组队…

python文件句柄_Python文件操作
classfile(object):def close(self): #real signature unknown; restored from __doc__关闭文件"""close() -> None or (perhaps) an integer. Close the file.Sets data attribute .closed to True. A closed file cannot be used forfurther I/O operation…

XML简单的增改删操作
XML文件的简单增改删,每一个都可以单独拿出来使用。 新创建XML文件,<?xmlversion"1.0"encoding"utf-8"?> <bookstore> <bookgenre"fantasy"ISBN"2-3631-4"> <title>Oberons Legacy&l…

javascript推荐书籍
WEB前端研发工程师,在国内算是一个朝阳职业,这个领域没有学校的正规教育,大多数人都是靠自己自学成才。本文主要介绍自己从事web开发以来(从大二至今)看过的书籍和自己的成长过程,目的是给想了解 JavaScript或者是刚接触JavaScrip…

【青少年编程竞赛交流】10月份微信图文索引
10月份微信图文索引 由于“组队学习”这个公众号的功能主要是组织Datawhale社群中的学习者们每个月的组队学习,所以,我另外新建了这个微信公众号“青少年编程竞赛交流”,在这个公众号上分享有关青少年编程方面的知识。如果大家需要就关注这个…

java 简单万年历_JAVA实现的简单万年历代码
本文实例讲述了JAVA实现的简单万年历。分享给大家供大家参考,具体如下:import java.util.Scanner;public class PrintCalendar {public static void main(String[] args) {int years 0;int month 0;int days 0;boolean isRun false;//從控制台輸入年…

mongoDB 入门指南、示例
http://www.cnblogs.com/hoojo/archive/2011/06/01/2066426.html mongoDB 入门指南、示例 上一篇:简单介绍mongoDB 一、准备工作 1、 下载mongoDB 下载地址:http://www.mongodb.org/downloads 选择合适你的版本 相关文档:http://www.mongodb.…