《Java程序设计》第4周学习总结
20175221 《Java程序设计》第4周学习总结
教材学习内容总结
-
子类的使用方法:class 子类名 extends 父类名
- 子类继承性:
- ① 继承其父类不是private的成员变量和方法
- ② 继承其父类中的protected和public的成员变量和方法
- 所有类的祖先类是Object类
- 成员变量的隐藏和方法重写的注意事项:
- 编写子类时:
- ① 声明的成员变量要与父类继承来的成员变量一致
- ② 子类继承的方法所操作的成员变量一定是被子类继承或隐藏的成员变量
- 方法重写:
- ① 方法的类型与其父类一致
- ② 方法的名字,类型不变
- ③ 方法的访问权限值允许提高,不允许降低(权限排序:public,protected,友好的,private)
- super关键字
- 子类一旦隐藏了继承的成员变量,其创建的对象就不再拥有该变量,该变量将归
super关键字
所拥有。 - 子类一旦隐藏了继承的方法,其创建的对象就不能调用被隐藏的方法,该方法调用由
super关键字
负责。 - 当子类调用父类的构造方法时,必须使用super关键字调用。
- final关键字
- 如果用final关键字定义成员变量、局部变量,则它们为常量。
- 可以使用
final
将类修饰为final类,且final类不能被继承。 -
对象的上转型对象
-
子类创建的对象引用到父类的对象当中,称对象a是对象b的上转型对象。
- 不可以将父类创建的对象的引用赋值给子类声明的对象
- abstract类和abstract方法
- abstract类不能用new运算符创建对象
- abstract类的对象作上转型对象
- abstract类中可以有abstract方法
- abstract类的子类:
- ① 一个非abstract类是abstract类的子类,必须重写父类的abstract方法。
- ② abstract类是子类时,可以重写,也可以继承父类的abstract方法。
教材学习中的问题和解决过程
-
问题1:为什么重写父类方法时不允许降低方法的访问权限
-
问题1解决方案:查阅资料知:
-
因为 向上转型及java程序设计维护的原因
-
例: 假设一个父类A 拥有的方法 public void setXXX(){} 可以被其他任意对象调用
-
这个方法被子类B覆写后为 void setXXX(){},即默认的访问权限 只能被本包极其子类所访问
-
假设其他包中的对象 C 调用方法为:get( A a){ a.setXXX(); } 而此时传入的对象为B类对象。
-
假设为b此时b将转型为a但是b中的setXXX() 调用权限 已经被缩小了这将造成错误。所以子类对象不能比父类对象访问权限大
原文:https://blog.csdn.net/ponnim_cs_dn/article/details/38726767
- 问题2:UniverStudent子类的创造方法中省略super运行结果会怎样
- 问题2解决方案:
- 贴上有无super关键字运行结果的截图
- 思考:
- super表示当前类的父类,super()调用的是父类默认的构造方法,即这样可以对父类进行初始化。
- 如何没有对父类进行初始化,当子类调用父类的方法时,便会从逻辑上出现错误,因为没对父类初始化,父类的方法和属性便没有内存空间。
代码调试中的问题和解决过程
-
问题1:在进行第四周的代码统计时,发现总行数好像不太对。
-
例如上周总统计923行,这周新添384行,应该是1307行才对,但是这周总统计却为1379行,很奇怪。
-
问题1解决方案:
这个问题我到现在还没有解决,不知道有没有和我遇到同样问题的小伙伴。 - 问题2:
- 在使用IDEA的时候,创建里边没有java.class文件
- 问题2解决方案:
-
我没有找到很好的解决方法,后来我把那个大的project重新新建了一遍才有的。至于原理也不太懂
代码托管(https://gitee.com/zxjacdl/zxj175221/tree/master/five.1)
statistics.sh脚本的运行结果截图
上周考试错题总结
错题1:
下列关于构造方法的叙述,正确的是:
A 当程序用类创建对象时,需使用它的构造方法。
B 类中的构造方法的名字必须与该类的名字完全相同,而且没有类型。
C 如果类中定义一个或多个构造方法,则默认为无参数的构造方法。
D 带有返回值的方法一定不是构造方法。
E 允许在一个类中编写若干个构造方法,但参数必须不同。
错题1解决:
A B D E
C项如果类中定义一个或多个构造方法,则Java不提供默认的构造方法。
.
其他(感悟、思考等,可选)
这是学习java的第四周,正好也是一个月的时间。相比于上一周二十多个例子的代码,还有很多包。这周的代码无论是量还是复杂程度,都轻松得多。
学习进度条也做了一个月,学习时间和代码行数都比原计划超额完成,这算是一个不小的进步。
学习进度条(三月份)
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 1000行 | 4篇 | 50小时 | |
第一周 | 13/13 | 1/1 | 12/12 | |
第二周 | 309/322 | 1/2 | 13/25 | |
第三周 | 614/923 | 1/3 | 15/40 | |
第四周 | 384/1379 | 1/4 | 12/52 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。 耗时估计的公式 :Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:10小时
-
实际学习时间:12小时
-
改进情况:学习时间和代码行数都超额完成原计划
(有空多看看现代软件工程 课件软件工程师能力自我评价表)
参考资料
-
[ Java 2 实用教程(第5版)]