20145207 2016-2017-2 《Java程序设计》第4周学习总结
一.继承与多态
1.继承的定义
面对对象中,子类继承父类,避免重复的行为定义,不过并非为了避免重复定义行为就使用继承,滥用而继承会导致程序维护上的问题。
程序代码重复在程序设计上就是不好的信号,多个类间出现重复的代码时,设计上可以考虑的改进方式之一,就是把相同的程序提升为父类。
在java中,继承时使用extends关键字,private成员也会被继承,只不过子类无法直接存取,必须通过父类提供的方法来存取。
在Java中,子类只能继承一个父类,继承有个重要的关系,就是子类和父类之间会有is-a的关系,要开始理解多态,必须先知道操作的对象是哪一类。
第一个是可以运行的RPG软件。第二个这是被继承的代码。这个是对于剑士的定义,通过继承来实现。这个是对于魔法师的定义,通过继承来实现。
虽然SwordsMan与Magician没有定义getName()、getLevel()、与getBlood()等方法,但从Role继承了这些方法,所以就如同例子中可以直接使用。 继承的好处之一,就是若要将name、level、blood改为其他名称,那就只要修改Role.java就可以了,只要是继承Role的子类都无须修改。 最后的程序运行结果:

虽然界面挺low的哈,看了后面的东西,再填进去几个界面也不是啥难事。好想做个游戏啊,要超厉害的那种。
2.多态与is-a
在Java中,子类只能继承一个父类,继承除了可避免的行为定义外,还有个重要的关系,那就是子类和父类之间会有is-a的关系。
编译程序就是语法检查器,要知道程序片段为何可以通过编译,为何无法通过编译,就是将自己当做编译程序,检查语法逻辑是否正确,方式是从=号的右边往左边读:右边是不是左边的一种。
什么是多态?以抽象讲法解释,就是使用单一的接口操作多种类型的对象。检查多态语法逻辑是否正确,方式是从右边往左读:右边是不是一种左边呢?如果不是就会编译失败,如果加上扮演语法,编译程序就会让程序代码通过编译,不过后果自负,也就是扮演失败,执行时会抛出ClassCastException。
3.重新定义
在继承父类之后,定义与父类中相同的方法部署,但执行内容不同,这称为重新定义。因为对父类中已定义的方法执行不满意,所以在子类中重新定义执行。
4.final关键字
如果class前使用了final关键字定义,那么表示这个类是最后一个了,不会再有子类,也就不能被继承。定义方法时,也可以是限定该方法为final,这表示最后一次定义方法了,也就是子类不可以重新定义final方法。
· 接口与多态
抽象类:java可以定义没有方法体的方法,该方法的具体实现由子类完成,该方法称为抽象方法,包含抽象方法的就是抽象类。抽象类和抽象方法必须用abstruct关键字来修饰。
interface:接口定义行为但不可定义操作。 接口中的成员修饰符是固定的。类与接口是实现关系,而且类可以继承一个类的同时实现多个接口。
public interface Swimmer{
public abstract void main swim();
}
implements:类要操作接口,使用implements关键字,操作接口时,对接口中定义的方法的两种处理方式:1.操作接口中定义的方法,2.将该方法标示为abstract
类与类之间存在着继承关系,类与接口中间存在的是实现关系。继承用extends,实现用implements
在interface接口中常常可以定义枚举常数(例:public static final int),实际上,在interface接口中也只能定义public static final的枚举常数,并且一定要使用=指定值,否则就会编译错误。
抽象类与接口的区别 1:抽象类只能被继承,而且只能单继承。 接口需要被实现,而且可以多实现。 2:抽象类中可以定义非抽象方法,子类可以直接继承使用。 接口中都有抽象方法,需要子类去实现。 3:抽象类使用的是 is a 关系。 接口使用的 like a 关系。 4:抽象类的成员修饰符可以自定义。 接口中的成员修饰符是固定的。全都是public的。
enum:enum语法可用于定义枚举常数,enum实际上定义了类,而enum中列举的常数实际上是public static final,无法撰写程序直接实例化枚举类型,因为构造函数权限设定为private,只有类中才可以实例化。enum 可定义枚举常数,但实际上 enum 定义了特殊的类,继承自 java.lang.Enum,编译过后会产生 Action.class 文件,可用这个 Action 声明类型
教材学习中的问题和解决过程
刚开始学习继承的时候敲第一个角色游戏代码出现错误,在继承的时候,需要将完整的代码都放在同一个文件夹下,书中有时候只是展现一部分代码,但前面的角色定义还要敲上去,保证代码的完整性,这样子类才会继承父类。 教材中的一些内容讲得十分详尽,例如多态与is-a,翻来覆去讲不同的语句可能出现的编译失败的情况及原因,这部分的学习也十分重要,关系到以后写出来的东西有没有弹性、好不好维护的问题;书中也有一些表述比较少,让人看得不是很懂的地方,例如instanceof运算符,Override等,只能通过视频加以学习。现阶段还停留在敲书上代码的过程,希望自己能够在接下来提出些更有价值的问题。
代码调试中的问题和解决过程

被声明为protected的成员,相同包中的类可以直接存取,不同包中的类需要在继承后的子类中存取。代码中没有继承关系不同类,编译失败,删去protected编译通过结果为10
代码托管
有啥说啥,这周什么代码也没敲,周日之前不知能不能回来,先把博客提交(就是单纯复制之前写过的,您不想看复制的代码,我就把代码部分删掉了)。
后续再往上面补。
20145207 2016-2017-2 《Java程序设计》第4周学习总结的更多相关文章
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 20145213《Java程序设计》第二周学习总结
20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...
- 20145213《Java程序设计》第一周学习总结
20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 20145330孙文馨 《Java程序设计》第一周学习总结
20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...
- 20145337 《Java程序设计》第九周学习总结
20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...
- 20145337 《Java程序设计》第二周学习总结
20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...
- 20145218《Java程序设计》第一周学习总结
20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...
- 《Java程序设计》第九周学习总结
20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...
- 《Java程序设计》第二周学习总结
20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...
随机推荐
- keepalived安装文档
安装依赖 su - root yum -y install kernel-devel* yum -y install openssl-* yum -y install popt-devel yum ...
- JavaScript浏览器对象模型(BOM)之history对象
history 对象是 window 对象的属性,它保存着用户上网的记录,从窗口被打开的那一刻算起. 一.history对象的属性 可以通过判断 history.length,得到是否有历史记录和记录 ...
- Pygame播放声音与音效
简单学习自小甲鱼视频教学(笔记) 实现功能: 运行后自动播放背景音乐,单击左键播放音效①,单击右键播放音效②, 空格键控制暂停背景音乐与恢复背景音乐,并且实现播放图标的切换. 代码如下: import ...
- VSCode调试C++
在ubuntu下调试C++ 本人觉得VSCode比较好用. 步骤如下: 1. 编写.cpp,.h文件 自行完成自己的程序. 2. 编写CMakeLists.txt.下面是一个比较好用的模板. 根目录为 ...
- 项目所有的证书文件路径iOS
~/Library/MobileDevice/Provisioning Profiles
- PAT——1026. 程序运行时间
要获得一个C语言程序的运行时间,常用的方法是调用头文件time.h,其中提供了clock()函数,可以捕捉从程序开始运行到clock()被调用时所耗费的时间.这个时间单位是clock tick,即“时 ...
- CC2540 低功耗串口, POWER_SAVING 模式 下 串口 0 的使用
低功耗 模式 下 使用 串口 , 因为 PM2 或者 PM3 状态下 32M晶振 是不工作 的,根据手册得知没有32M晶振, 串口是不能工作的,但是可以使用 外部中断,因此,我把 串口的接收引脚 ...
- MySQL导出表结构方法
方法一: 以下用的是Navicat Premium,可以换成任意图形化客户端 SELECT COLUMN_NAME 列名, COLUMN_TYPE 数据类型, DATA_TYPE 字段类型, CHAR ...
- 【.net开发者自学java系列】使用Eclipse开发SpringMVC(1)
第一篇随笔,有点紧张.有错别字是正常的.... 好了,自我描述下.我是一个有几年.net开发经验的老菜鸟.是的,老菜鸟.别跟我讨论底层,别跟我讨论协议.TMD啥都不会. 为什么要学JAVA,我也不想, ...
- Eclipse操作Servlet入门案例,创建类无法实现Servlet接口和继承HttpServlet类
问题描述: 从昨天下午到今天中午,这个问题被缠绕了良久.百度了很多,却都没有一言命中要害. 首先,还是基于对Web的理解. 第一:建立的是Dynamic Web Project: 第二:然后需要 ...