20155236 2016-2017-2 《Java程序设计》第四周学习总结
教材学习内容总结
1.继承基本上就是避免多个类间重复定义共同行为。
继承的三个好处:减少代码冗余;维护变得简单;扩展变得容易。
构造方法不能被继承。
2.s-a指的是类的父子继承关系,中文称为“是一种”关系。
多态:用抽象讲法解释,就是使用单一接口操作多种类型的对象。
3.被声明为protected的成员,相同包中的类可以直接存取,不同包中的类可以在继承后的子类直接存取。与我们熟知的关键字public之间来说,它的权限较小。
4.如果类有继承关系,在创建子类实例后,会先进行父类定义的初始流程,再进行子类中的初始流程,也就是创建子类实例后,会先执行父类构造函数定义的流程,再执行子类构造函数定义的流程。
5.Java中所有对象一定是一种Object.在Java中,自来只能继承一个父类,如果在定义类的时候没有指定要继承哪一类,那么这个类就一定是继承。
6.类要操作接口,必须使用implements关键字。操作某接口时,对接口中定义的方法有两种处理方式,一是操作接口中定义的方法,二是再度将该方法标示为abstract。
7.临时继承某个类或操作某个接口并建立实例,可使用匿名内部类:new 父类()|接口(){// 类本体操作 };。
教材学习中的问题和解决过程
在编译第二个程序时,因为类的关系导致无法编译,于是下载了idea,这上面很方便,把每个代码放入同一project里问题就可以解决。
检查多态语法逻辑是否正确,方式是从右向左读,即右边类型是不是左边类型的子类?不是的话会编译失败,如果加扮演cast语法,虽然可以通过编译,但是执行时是扮演失败,会抛出classCastException.
在drawfight()方法中声明的role类型的参数,方法中调用的,到底是Role中定义的fight()还是个别子类中定义的fight()?
Swordsman上挂有Role的牌子,我们只是要求有Role牌子的对象攻击,那么发动攻击的对象就是Swordsman实例。我们所写的drawfight(Swordsman)意味着,我们此次操作的是挂有role牌子的Swordsman实例。想问一下老师,什么叫做操作抽象方法?
代码调试中的问题和解决过程
在“重新定义行为”这一节中,我们应先将role类中添加fight()方法,再给Swordsman与Magician两个子类中加入对于fight的描述。因为有了idea,所以我们可以统一修改role。
想问一下老师,这个程序我按照书上的打下来后,并不能停止访客名称的录入,无法输出访客名单= =不知道为什么。
代码托管
- 代码提交过程截图:
- 代码量截图:
上周考试错题总结
- 填空:Linux Bash中,(grep)命令可以进行全文搜索。
grep命令能使用正则表达式搜索文本,并把匹配的行打印出来。 - 判断:Java中类总会有默认构造方法。(X)
对于java而言,如果每个类中,你不先写构造方法,它都默认存在一个无参的构造方法。故本题错。
其他(感悟、思考等,可选)
子类和父类中定义某个方法时,必须保持一致,不然就会出现行为丢失。但我们现在可以在定义方法前加上@Override去要求编译程序检查。感觉这周的内容,自学的话并不能很懂。。。老师能不能在课堂上讲一下重点,我有点懵逼了。。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 20/20 | 1/1 | 10/10 | |
第二周 | 58/78 | 1/2 | 6/16 | |
第三周 | 200/278 | 1/3 | 10/26 | |
第四周 | 660/938 | 1/4 | 10/36 |