学号20162320 《程序设计与数据结构》第7周学习总结
教材学习内容总结
- Java实现多态有三个必要条件:继承、重写、向上转型
- 实现创建多态引用的两种方法:继承和接口
- 后绑定,多态引用是一个在不同时刻可以指向不同类型对象的引用变量,它在运行时才将方法调用与它的定义绑定在一起(在很多情况下方法调用与定义绑定都是在编译时完成),这个延迟的提交叫做后绑定或动态绑定。
- 当用某个类名声明一个引用变量时,可以用它指向这个类的任意对象,包括声明继承与它的任意类的任何对象。例如,如果Student类继承于Person类,则
Person p1 = new Student();
- 接口,表示一组公共的抽象方法,通过这些方法可以与一个对象进行交互,并且不能被实例化。接口使用
interface
来定义。注:一个类可以实现多个接口,例如class A implements C, D, E
,接口中的方法都是public权限 - 接口层次,继承也可以用于接口,就是从一个接口可以从另一个接口派生而来。通过教材理解,接口的继承和类的继承一样,子接口继承父接口的所有抽象方法和常量
- 通过接口实现多态,接口名字可用来声明对象引用变量,接口引用可以指向实现这个接口的任意类的对象
- 软件包的使用,例如我在文件夹chapter9做的一个类就可以用
package chapter9
,将其放入chapter9的文件夹中,在IDEA中系统自动帮我们省略了这个步骤。但是在虚拟机中做时,编译时需要使用-d
参数,该参数的作用是依照报名生成相应的文件夹 - 包名的命名规范:1.要求包名所有字母小写 2.包名一般情况下,是你的域名要倒过来写 3.一个类的全名应该是
包名 + .+ 类名
- Java中的访问权限,1.public(公共权限)可以修饰类、成员变量和成员函数 2.private(私有权限)可以修饰成员变量和成员函数,只能在本类当中使用 3.default(包级别访问权限)不写权限修饰符,就是default权限,可以修饰类、成员变量和成员函数 4.protected(受保护权限)
教材学习中的问题和解决过程
- 问题1:为什么教材上的Firm类的例子中的StaffMember类要声明为抽象类,感觉没必要。
解决方案:我的理解是,声明抽象类的意义是限定不能让它实例化,StaffMember是作为继承中的占位符来辅助多态的对象的。 - 问题2:类和接口有什么区别,第一次学发现两个的内容基本相同,又有继承的功能,感觉有些混淆。
解决方案:通过仔细揣摩教材上的知识,发现了唯一的一点区别,就是类可被实例化,而接口是抽象的不能被实例化。这难道就是二者唯一的不同吗,还有没有其他的不同呢,暂时还未想出答案。
代码调试中的问题和解决过程
- 问题1:图中
(char)(message.length();
将一个字符强制转化为char类型到底会变成什么?
解决方案:首先翻阅以前的教材,发现并没有相关解释,只有强制转化为int的示例。没办法,只好将Secret类改编一下,我把原程序中加减shift给去掉了,防止出现随机数,令我惊奇的是打印出的结果竟然是如图所以说char对于字符的强制转化基本是不变的,这就很奇怪了,为什么要这么做呢。 - 问题2:
Printer printer= null
是什么意思。
解决方案:通过研究示例,发现这相当于声明了一个接口类型的引用,但是为什么不用implement来呢,待解决。
代码托管
(statistics.sh脚本的运行结果截图)
上周考试错题总结
- 错题1:A(n) ________________ is a step-by-step process for solving a problem(___是为了解决问题而进行的一步步的处理过程) 答案:algorithm(算法)
解决方案:我选的是UML类图,我以为UML类的定义就是反映的过程。其实完全不是,算法是解决问题的一步一步的方法,而UML图是直观地表示类和对象交互的方式。聚合对象是部分由其他对象组成的对象。类可以被看作是一组对象的蓝图。 - 错题2:A return statement is not required at the end of every method(在方法的结尾,返回语句不是必需的).(正确)
解决方案:我是根据我以前做的代码来判断的,想起了大部分语句都有return就直接选了错误答案。构造函数或任何用返回类型无效声明的方法都不需要返回语句。 - 错题3:The ________________ reference always refers to the currently executing object(___引用总是指向当前正运行的对象).(this)
解决方案:我选的是static,this引用总是引用当前执行的对象。空引用是指不指向任何对象的引用。其他三个选择都不在java特别参考。
结对及互评
点评过的同学博客和代码
其他(感悟、思考等,可选)
学了这么多,实际操作编写类这个坎却迟迟过不去,现在连教材的课后练习都很吃力了,希望老师出个PP系列的解析参考一下。
还有就是发现了一个很好的java辅助学习网站
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 180/180 | 1/4 | 15/15 | |
第二周 | 465/645 | 1/5 | 18/33 | 学习了scanner |
第三周 | 456/1101 | 1/6 | 17/ 50 | 学会了如何编写数学公式等 |
第四周 | 620/1734 | 2/8 | 40/90 | 学了条件循环和数组 |
第五周 | 890/2604 | 1/9 | 25/115 | 接近学会了编写类 |
第六周 | 462/3068 | 1/10 | 30/145 | 了解了继承的概念 |
第七周 | 860/3928 | 2/12 | 41/186 | 巩固以往知识 |
第八周 | 1/13 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
- 计划学习时间:30 小时
- 实际学习时间:41 小时
(有空多看看现代软件工程 课件 软件工程师能力自我评价表)