20182307 2019-2020-1 《数据结构与面向对象程序设计》第五周学习总结
20182307 2019-2020-1 《数据结构与面向对象程序设计》第五周学习总结
教材学习内容总结
- 第8章 继承 解释了继承的概念,引出了组织并创建类的基础,即父类及子类间is-a关系。简要可理解为父类是一个较为抽象的类,子类要具体一层,子类的子类便会更加具体下去,兄弟(sibling)间层次相同。
- 解释了与继承相关的多个知识点,如protected修饰符、多重继承、方法重写等
学习笔记:
- 继承:
- 概念:从已有的类中派生一个新类的过程
- 目的:复用已有的软件
- 继承在父类和子类之间建立了is-a关系,即子类是父类一个更特殊的情形
- 用保留字extends来说明从已有类中派生一个新类
- 继承是单向的
- 构造方法不能继承
- protected修饰符:保护可见性提供了继承之间最恰当的封装机制
- super引用:常用于调用父类的构造方法
- 多重继承:一个子类继承于多个父类
- 方法重写:子类可以重写继承自父类的方法
- Object类:
- Java的所有类都直接或间接地派生于Object类
- Java程序中的每个类都继承了toString和equals方法
- 抽象类:
- 抽象类不能实例化
- 派生于抽象父类的类必须重写父类中的所有的抽象方法,否则派生的类仍为抽象类
- final修饰符:
- 可用来限制继承
- 可用于整个类。终极类不能被继承
教材学习中的问题和解决过程
- 问题1:什么是继承?
- 书本内容:继承是从已有类派生一个新类的过程
- 个人理解:新类自动包含原类中的变量和方法,在我理解来就是拥有着父类的一切特性。但就像马是哺乳动物的一种一样,它具有哺乳动物的一切特征,但哺乳动物却不可能有马的一切特征。所以,子类就是拥有了其他特征特色的父类,表现为子类可调用父类的一切方法,也可以调用自己的方法
- 问题2:方法重写的意义?
- 书本内容:子类可以重写(重定义)继承自父类的方法
- 个人理解:虽然子类直接从父类继承了所有的变量和方法,但是在具体应用的时候往往会发现父类的方法不适用子类程序设计的目的,这时候方法重写就体现了它的价值,极大提升了程序的灵活性
- 问题3:什么是抽象类?
- 书本内容:抽象类表示类层次中的一般概念,代表一个抽象的实体。
- 个人理解:抽象类,顾名思义,是一个表示抽象概念的类。比如车子这一类,是一个很抽象的概念,其下有轿车、卡车等更具体的子类。当在抽象类中定义行为时,子类也就继承获得了抽象父类中的行为,比如学生是人的子类,人会说话而学生也会说话这种行为。
代码调试中的问题和解决过程
- 问题1:不明白课堂继承程序演示中
for (Employer employer : employers)
语句的意思- 解决方案:查询书本第4章条件与循环,第7章数组得知,第一个Employer是类的名称,第二个employer是自定义的名字,第三个employers是数组的名字。打在循环中即意为循环这整个数组的元素
- 问题2:有理数计算器不会进行字符串计算
- 原因分析:就算使用nashron引擎计算出了字符串表达式的值,再将小数,例如0.33333转换为1/3也是做不到的。要想进行完全的分数计算,只能编写一个分数计算器
- 解决方案:通过最大公约数等方法进行编程,用StringTokenizer来判断分隔符,分别取出分数与运算符
- 问题3:运行循环输入时报错
- 原因分析:输入数据的格式是有要求的。在本程序中,规定第一个输入的是double型数据,输入String类型就会报错
- 解决方案:输入时按照规定的输入数据类型依次输入
代码托管
上周考试错题总结
错题1:
In order to preserve encapsulation of an object, we would do all of the following except for which one?
A .Make the instance data private
B .Define the methods in the class to access and manipulate the instance data
C .Make the methods of the class public
D .Make the class final
E .All of the above preserve encapsulation
- 原因:我对于public的理解就是公开,所以认为这与封装的目的相悖,就认为是错误的答案
- 理解情况:封装意味着类外的代码不能访问、修改类内变量的值,所以变量定义为private,而方法的设计目的是为了让对象能与程序其他部分进行交互,与定义为public无关。final保留字是用来控制继承的,与封装无关。
错题2:
An example of passing message to a String where the message has a String parameter would occur in which of the following messages?
A .length
B .substring
C .equals
D .toUpperCase
E .none of the above, it is not possible to pass a String as a parameter in a message to a String```
- 原因:对于String类中的方法不熟悉,当初学习时练习次数就很少;且不理解题目中“将一个信息传递给一个有字符串参数的信息”的意思
- 理解情况:length和toUpperCase没有参数,substring需要两个int型参数,equals需要一个String类型的参数
String类 |
---|
int length() |
String substring(int offset,int endIndex) |
boolean equals(String str) |
String toUpperCase |
-
错题3:
What happens if you declare a class constructor to have a void return type?
A .You'll likely receive a syntax error
B .The program will compile with a warning, but you'll get a runtime error
C .There's nothing wrong with declaring a constructor to be void
D .The class' default constructor will be used instead of the one you're declaring
E .None of the above
- 原因:本题正确答案为A,我选择了D,是因为误以为题目表达的是当构造方法未定义时,会使用默认的构造方法
- 理解情况:构造方法没有返回类型,没有void,不能返回任何值,定义类型为void会收到语法错误的报错
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 10000行 | 30篇 | 400小时 | |
第一周 | 209/209 | 2/2 | 9/9 | |
第二周 | 290/499 | 2/4 | 18/28 | |
第三周 | 516/1015 | 2/6 | 22/50 | |
第四周 | 2981/3996 | 2/8 | 32/82 |
结对及互评
点评20182320:
- 博客中值得学习的或问题:
- 图片排列整齐,排版精美
- 自己积极思考,最终解决问题
- 结尾有自己真切实际的感悟
- 错题反思具体明确
- 学习情况记录详细完善
- 代码中值得学习的或问题:
- 代码简洁明了,功能齐全却不冗长
- 基于评分标准,我给本博客打分:15分。得分情况如下:
- 正确使用Markdown语法(加1分)
- 模板中的要素齐全(加1分)
- 教材学习中的问题和解决过程(加2分)
- 代码调试中的问题和解决过程(加1分)
- 本周有效代码超过300分行的(加2分)
- 其他加分,加8分 :
- 排版精美(加1分)
- 进度条中记录学习时间与改进情况(加1分)
- 感想,体会不假大空的(加1分)
- 结对学习情况真实可信的(加1分)
- 代码Commit Message规范(加1分)
- 错题学习深入(加1分)
- 有动手写新代码(加1分)
- 点评认真,能指出博客和代码中的问题(加1分)