20145328 《Java程序设计》第4周学习总结
20145328 《Java程序设计》第4周学习总结
教材学习内容总结
第六章 继承与多态
6.1 何谓继承
- 继承也符合
DRY(Don't Repeat Yourself)
原则 ISA
与OCP
原则,LSP
原则- 赋值:
「=」
右边ISA
左边,否则要强制类型转换
- 赋值:
Role role1 = new SwordsMan()
SwordsMan swordsman = role1; //x
SwordsMan swordsman = (SwordsMan)role1; //ok
+ 注意`ISA`是指功能上的
extends
Java
中只有单一继承,也就是只能有一个父类- 要实现
C++
中的多重继承,要使用第七章中的「接口(Interface)
」
UML
- 多态
- 继承可以复用代码,更大的用处是实现「多态」
- 封装是继承的基础,继承是多态的基础
+「用父类声明对象引用,用子类生成对象」就有了多态
- 覆盖
(Override)
- 区分重载
(Overload)
Annotation
:@override
- 区分重载
- 抽象方法、抽象类
abstract
- Java中有抽象方法的类一定是抽象类,但抽象类中的方法不一定都是抽象方法
- 抽象类不能使用
new
生成对象
6.2 继承语法细节
public
/package
/protected
/private
super
与this
java.lang.Object
toString
equals
hashCode
instanceof
- 垃圾收集
(Garbage Collection,GC)
- 无法通过变量引用的对象就是
GC
认定的垃圾对象 - 垃圾回收前会调用
finalize()
方法,但由于调用时机无法确定,建议不要使用finalize()
方法
- 无法通过变量引用的对象就是
第七章 接口与多态
7.1 何谓接口
- 接口
(interface)
定义行为- 对于定义行为,可以使用interace关键字定义,类要操作接口,必须使用implements关键字,对接口中定义的方法有两种操作方式,一是操作接口中定义的方法,二是再度将该方法表示为abstract。操作接口表示“拥有行为”,不再是“是一种”的关系。
implements
- 解决需求变更
- OCP原则,ISP原则
7.2 接口语法细节
- 接口中的
public abstract
可以省略 - 接口中的方法没有操作时,一定得是公开并且抽象。
- 在
interface
接口中常常可以定义枚举常数(例:public static final int
),实际上,在interface
接口中也只能定义public static final
的枚举常数,并且一定要使用=指定值,否则就会编译错误。
- 在
- 接中可以使用
extends
继承接口,并且可以继承多个接口 - 匿名内部类与
Lambda
JDK8
前在匿名内部类中访问局部变量,则该局部变量必须为final
emum
- 使用
enum
枚举常数:public enum Action{}
,实际上enum
定义了特殊的类,enum
中的元素也就是枚举常数。
- 使用
教材学习中的问题和解决过程
本周学习内容为第六章和第七章,由于涉及继承、接口,书上有很多的类名称出现了重复的现象,原本按书上的意思是可以在同一个类名下进行代码修改,但是为了能够对比明显,我还是将每一个类写了一遍,根据书上的Role
、SwordsMan
、Magician
、RPG
等有多个重复名称的类名称前面的前缀,例如Game1
、Game2
……将Role
、SwordsMan
、Magician
、RPG
分别命名为Role1
、SwordsMan1
、Magician1
、RPG1
,既能使代码更改对比明显,也能够解决由于类名重复而导致编译失败问题。
代码调试中的问题和解决过程
在调试书上P187的Guess
代码的时候按照书上输入如下代码:
public class Guess {
public static void main(String[] args) {
GuessGame game = new ConsoleGame();
game.go();
}
}
却发现在运行时出现如下错误:
根据如图错误信息提示找到之前所编辑的GuessGame
代码
public abstract class GuessGame {
private void go(){
int number = (int) (Math.random() * 10);
int guess;
do{
print("输入数字:");
guess = nextInt();
}while (guess != number);
println("猜中了");
}
public void println(String text){
print(text + "\n");
}
public abstract void print(String text);
public abstract int nextInt();
}
发现是由于在IDEA
使用tab
快速编写过程中将public void go()
写成了private void go()
导致无法调用GuessGame
中的go()
函数而发生错误。修改后即可正确运行。
学习感悟
虽说上面的这个代码调试中的问题是一个很简单的编写错误,但也提醒了我在编写代码的过程中应该更加细心,不要一味图快而导致代码出错,产生欲速则不达的效果。本周学习的内容也算是上周学习内容的一个延续,有了上周的基础,理解书上内容并不算困难,只是本周除了Java之外其他科目的学习任务也开始多了起来,周末也还有计算机二级的考试,虽然考试并不算难,但还是抽出了大量的时间来备考,以至于感觉同时兼顾这么多的学习任务有点困难,这周的博客还有代码托管都是拖到了最后才完成。
代码托管情况
解决了上周git
上传时将.class
文件也一起上传的问题,详细情况会另外起草一篇博客详写。本周代码托管情况截图如下
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 40篇 | 500小时 | |
第一周 | 30/30 | 3/7 | 28/28 | |
第二周 | 120/150 | 1/8 | 23/41 | |
第三周 | 400/550 | 1/9 | 23/64 | |
第四周 | 550/1100 | 1/10 | 24/88 |
参考资料
20145328 《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 ...
随机推荐
- maven web框架搭建
前面我们描述了如何使用maven搭建一个最基本的Java Project 框架.在实际生产应用中,一般不会仅仅建立一个最基本的Java Project项目,目前 Java Web 开发已经成为Java ...
- Educational Codeforces Round 25 E. Minimal Labels&&hdu1258
这两道题都需要用到拓扑排序,所以先介绍一下什么叫做拓扑排序. 这里说一下我是怎么理解的,拓扑排序实在DAG中进行的,根据图中的有向边的方向决定大小关系,具体可以下面的题目中理解其含义 Educatio ...
- iwconfig
解决办法:清空/var/lib/dhclient/dhclient.leases文件里的所有内容 # sudo dhclient -r //release ip 释放IP # sudo dhclien ...
- smp,numa,mpp,umam,olap,dss,oltp,greenplum,presto
SMP.NUMA.MPP体系结构介绍 从系统架构来看,目前的商用服务器大体可以分为三类,即对称多处理器结构 (SMP : Symmetric Multi-Processor) ,非一致存储访问结构 ( ...
- 草莓糖CMT依旧强势,数字货币量化分析[2018-05-29]
[分析时间]2018-05-29 17:45 [报告内容]1 BTC中期 MA 空头排列中长 MA 空头排列长期 MA 空头排列 2 LTC中期 MA 空头排列中长 ...
- MYSQL--表分区、查看分区(转)
一. mysql分区简介 数据库分区 数据库分区是一种物理数据库设计技术.虽然分区技术可以实现很多效果,但其主要目的是为了在特定的SQL操作中减少数据读写的总量以缩减sql语句的响应时间, ...
- python定义函数时默认参数注意事项
如果在调用一个函数时,没有传递默认参数,则函数内的默认参数是对函数的默认参数属性__defaults__的引用, 如 def func(arg1=[]): arg1.append(2) 调用func时 ...
- git学习------>如何汉化GitLab?
在上一篇博客中,已经正常安装好了GitLab,然而全部界面都是纯英文的,为了照顾整个团队的英文水平,因此这篇博客的目的是将纯英文的GitLab进行汉化. 纯英文界面 第一步: 确认GitLab版本号 ...
- GROUP BY 和 ORDER BY一起使用
转:http://lzfhope.blog.163.com/blog/static/636399220092554045196/ 环境:oracle 10g单单group by 或者order by本 ...
- 【开发者笔记】归并排序过程呈现之java内置GUI表示
在网上看到一个视频将各种排序用视频表示出来,配上音乐,挺好玩的样子,就算是不会编程的人看到也会觉得很舒服,碰巧我也正在写归并算法,于是就用java的GUI实现一个. 归并排序的时间复杂度是T(n)=O ...