20145328 《Java程序设计》第4周学习总结
2016-03-27 23:45
369 查看
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 |
参考资料
Java学习笔记(第8版)《Java学习笔记(第8版)》学习指导
Github使用gitignore忽略增加指定文件
相关文章推荐
- Java编程思想
- Struts2学习总结(2)--数据接收,数据共享,类型转换,上传下载
- JAVA 对象引用,以及对象赋值
- /bin/basename is needed by jdk
- Java 对象和类
- JAVA学习笔记(二)
- [置顶] maven搭建SpringMVC+Spring+hibernate+JPA
- java 选择器
- HDU 1002 A + B Problem II(大数加法,C,Java两个版本)
- java中的"goto"--label
- JAVA中的File.separate(跨平台路径)
- 抽象类与接口
- 《Java程序设计》第4周学习总结
- 20145321 《Java程序设计》第4周学习总结
- Java中函数参数的传递是值传递还是引用传递
- 20145310 《Java程序设计》第4周学习总结
- JAVA设计模式之单利模式
- 20145216史婧瑶《Java 程序设计》第4周学习总结
- 20145216史婧瑶《Java 程序设计》第4周学习总结
- Java过滤器与SpringMVC拦截器之间的关系与区别