您的位置:首页 > 编程语言 > Java开发

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/303/728/28
第二周120/1501/823/41
第三周400/5501/923/64
第四周550/11001/1024/88

参考资料

Java学习笔记(第8版)

《Java学习笔记(第8版)》学习指导

Github使用gitignore忽略增加指定文件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: