王彪20162321 2016-2017-2 《程序设计与数据结构》第6周学习总结
教材学习内容总结
-1.关键概念
- 1.继承是从已有类派生一个新类的过程.
- 2.继承的目的之一是复用已有的软件.
- 3.继承在父类和子类之间建立了 is-a 关系.
- 4.保护可见性提供了继承之间最恰当的封装机制.
- 5.可以使用super引用来调用父类的构造方法.
- 6.子类可以重写(重定义)继承自父类的方法.
- 7.一个类的子类可以是一个或多个其他类的父类,这样形成了类层次.
- 8.公共特性应该放到类层次中尽可能高的位置上.
- 9.Java的所有类都直接或间接地派生于Object类.
- 10.Java程序中的每个类都继承类toString和equals方法.
- 11.抽象类不能实例化,它提供的概念可由其他类来定义.
- 12.派类于抽象父类的类必须重写父类中所有的抽象方法,否则派生的类认为抽象类.
- 13.私有成员也被子类继承,但不能通过名字直接引用。不过可以间接引用它们.
- 14.final修饰符可以用来限制继承.
-2.重点总结
- 1.构造方法不能继承.
- 2.抽象类不能生成对象
- 3.如果一个类有抽象函数,那么它一定为抽象类.
- 4.没有抽象函数也可以定义为抽象类.
- 5.在子类的构造函数当中,必须调用父类的构造函数.
教材学习中的问题和解决过程
- 问题1:在书上的程序中的某些代码不清楚作用.
public class Book
{protected int pages = 1500;
public void setPages (int numPages)
{pages = numPages;}
public int getPages (){
return pages;}
}
程序中有一段代码
{pages = numPages;}
而在Words类实例化时并没有调用此函数,翻阅书发现还有很多相似的程序,不明所以.
解决过程:和刘先润同时遇到此问题当时都有点懵,任何问题都难不倒实践对吧,我在Words.java程序中调用此函数,发现并没有出现编译错误,而且它更改了成员变量pages的值,顿觉大悟,一个书类,可以有很多种书,文学,科学等,而不同书有不同的页数,这是很符合实际情况的,代码中首先就给pages赋值1500,但实际情况中不可能每本书都是1500页吧,所以设计此函数,反应过来后还挺简单的,每段代码都有它的可取之处。
-
问题2:理解 我们为了能在派生类中引用而声名一个公有变量,那么这就违背了封装的原则.
解决过程:
1.关于封装:一个对象应该是自管理的,即对象的实例数据应该仅由该对象来修改.
封装提供了一个有效的途径来保护数据不被意外的破坏。
相比我们将数据(用域来实现)在程序中定义为公用的(public)我们将它们(fields)定义为私有的(privat)在很多方面会更好。
2.关于保留字public :公有变量与封装的原则相悖,它允许定义数据的类之外的代码访问或修改数据的值.
3.继承,封装,多态,java封装的概念,理解封装 -
问题3:重载与重写
解决过程:
1.重载:在Java中可以让多个方法使用相同的方法名但带有不同的参数列表.
2.重写:当子类中定义的方法与父类中定义的方法有相同的名字和签名时,我们说子类重写了父类中的方法.
3.Java的重写和重载机制
代码调试中的问题和解决过程
- 问题1:程序8.11中的问题
public class FoodItem
{
final private int CALORIES_PER_GRAM=9;
private int fatGrams;
protected int servings;
...
}
变量fatGrams为私有变量,所以他只能在所定义的类中使用,但是
public class Pizza extends FoodItem
{
public Pizza (int fatGrams)
{
super (fatGrams,8);
}
}
而在子类Pizza中就引用了这个变量,顿觉不明
- 解决过程:并没有搞清楚,个人认为这两个fatGrams应该表示两个不同的量吧
代码托管
结对及互评
这周主要是在帮助相互理解封装的概念,结对项目还在改进,因为要拿T-shirt衫是吧
其他(感悟、思考等,可选)
这周内容不是很多,但重在理解,分享发一些好地方
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第五周 | 200/1500 | 6/11 | 97/120 | |
第六周 | 200/1700 | 7/11 | 110/120 | |
第七周 | 000/0000 | 0/13 | 00/120 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:XX小时
-
实际学习时间:XX小时
-
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)