20145328 《Java程序设计》第4周学习总结

教材学习内容总结

第六章 继承与多态

6.1 何谓继承

  • 继承也符合DRY(Don't Repeat Yourself)原则
  • ISAOCP原则,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

  • superthis
  • 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中的元素也就是枚举常数。

教材学习中的问题和解决过程

本周学习内容为第六章和第七章,由于涉及继承、接口,书上有很多的类名称出现了重复的现象,原本按书上的意思是可以在同一个类名下进行代码修改,但是为了能够对比明显,我还是将每一个类写了一遍,根据书上的RoleSwordsManMagicianRPG等有多个重复名称的类名称前面的前缀,例如Game1Game2……将RoleSwordsManMagicianRPG分别命名为Role1SwordsMan1Magician1RPG1,既能使代码更改对比明显,也能够解决由于类名重复而导致编译失败问题。

代码调试中的问题和解决过程

在调试书上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周学习总结的更多相关文章

  1. 20145213《Java程序设计》第九周学习总结

    20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

  2. 20145213《Java程序设计》第二周学习总结

    20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...

  3. 20145213《Java程序设计》第一周学习总结

    20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...

  4. 21045308刘昊阳 《Java程序设计》第九周学习总结

    21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...

  5. 20145330孙文馨 《Java程序设计》第一周学习总结

    20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...

  6. 20145337 《Java程序设计》第九周学习总结

    20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...

  7. 20145337 《Java程序设计》第二周学习总结

    20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...

  8. 20145218《Java程序设计》第一周学习总结

    20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...

  9. 《Java程序设计》第九周学习总结

    20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...

  10. 《Java程序设计》第二周学习总结

    20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...

随机推荐

  1. LeetCode-Combination Sum IV

    Given an integer array with all positive numbers and no duplicates, find the number of possible comb ...

  2. NSUserDefault 保存自定义对象

    由于NSUserDefaults 不支持保存自定类,保存的对象需要实现NSCoding协议,不过自定的类型就算实现了NSCoding也不可以保存,可以通过以下方法实现: //h文件 #import & ...

  3. Travel---hdu5441(并查集)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5441 题意:是有n个城市,m条边包含u v w:代表u到v的时间是w: 给q的时间x,求在x时间内Ja ...

  4. Windows使用中的一些小技巧

    1.网站保存在桌面 在桌面新建一个快捷方式,然后输入网址即可.

  5. 4.GIT安装

    最早Git是在Linux上开发的,很长一段时间内,Git也只能在Linux和Unix系统上跑.不过,慢慢地有人把它移植到了Windows上.现在,Git可以在Linux.Unix.Mac和Window ...

  6. 18.解决合并androidmanfest错误

    这个是minsdk和tartgetsdk的版本不一致的问题

  7. Android Studio下编译调试 ndk 的示例

    https://github.com/googlesamples/android-ndk https://github.com/googlesamples android studio 手动安装cma ...

  8. python学习笔记(二十七)多线程与多进程

    线程是程序里面的最小执行单元. 进程是资源的集合. 线程是包含在一个进程里面,一个进程可以有多个线程,一个进程里面默认有一个主线程.由主线程去启动子线程. 1.多线程 import threading ...

  9. PAT 1041 Be Unique[简单]

    1041 Be Unique (20 分) Being unique is so important to people on Mars that even their lottery is desi ...

  10. CentOS 7 安装vsftpd 服务器

    在CentOS7上安装ftp服务器用于保存服务端上传的图片. 1.CentOS卸载vsftpd的方法 如果服务器上已经安装了vsftpd服务,配置出错需要卸载vsftpd服务. 1.1 查找vsftp ...