第五周总结
学号 2019-2020-1823 《数据结构与面向对象程序设计》第五周学习总结
教材学习内容总结
- 继承是java类的一种特征,可以在父类的前提下编写出子类,继承避免多个类间重复定义共同行为,使用关键字extends。继承表明了子类与父类之间的is-a关系,中文称为“是一种”。子类继承父类之后,定义与父类中相同的方法部署,但执行内容不同,这称为“重新定义” ,即“重写”(Override)。
- 在Java中只有单一继承,即子类只能继承一个父类
- 在Java中,如果想取得父类中的方法定义,可以在调用方法前,加上super关键字。可以使用super调用的父类方法,不能定义为private(因为这就限定只能在类内使用)。
- 如果想执行父类中某构造函数,可以使用super()指定。如:super(10)表示调用父类构造函数时传入int数值10。
- 如果class前使用了final关键字定义,那么表示这个类是最后一个了,不会再有子类,也不会被继承
- 重新定义方法要注意,对于父类方法中的方法权限,只能扩大不能缩小。若原来成员public,子类重新定义时不可为private或protected
- enum可用于定义枚举常数。
- java split(“”)可以用来分割字符串
- char[] e = s.toCharArray();可以用来将字符串s全部填入字符数组e[]中,这样可以对e进行索引,找出关键字符。
- a = Integer.parseInt(a1[0]);可以将字符串a1[]转换成整数型a
- 在Java中可以使用interface定义抽象的行为和外观。接口中的方法没有操作时,一定得是公开且抽象。
教材学习中的问题和解决过程
问题1:方法重载 与 方法重写
问题1解决方法:多态性是面向对象编程的一种特性,和方法无关。静态多态性是指,同样的一个方法能够根据输入数据的不同,做出不同的处理,即方法的重载(有不同的参数列表)。动态多态性是指,当子类继承父类的相同方法,输入数据一样,但要有别于父类的相应时,就要覆盖父类方法,即在子类中重写该方法(相同参数,不同实现)。
- 问题2:容易搞混public、private、protected
- 问题2解决方法:对修饰符进行总结
总结:
修饰符:权限修饰符、状态修饰符、抽象修饰符
类:
权限修饰符:默认修饰符,public
状态修饰符:final
抽象修饰符:abstra
成员变量:
权限修饰福:4种均可
状态修饰符:static,final
构造方法:
只有权限修饰符:4种均可
成员方法:
权限修饰符:4种均可
状态修饰符:static,final
抽象修饰符:abstract
用得较多的是public
目前见到的组合规则:
成员变量:public static final
成员方法:public static、public abstract、public final
- 问题3:super. 与 this.的使用区别
- 问题3解决方法:
this表示当前对象,也就是当前类对象,super表示当前类的父类,如
public changfangxing(int chang,int kuan,int gao)
{
this.chang=chang;
this.gao=gao;
this.kuan=kuan;
}
这上面我们用的就是this,表示的是当前对象里chang的数据。
public zhengfangxing(int chang, int kuan, int gao)
{
super(chang, kuan, gao);
}
super用的是当前类的父类。
代码调试中的问题和解决过程
- 问题1:String[] a1 = s.split("+");为何运行失败
- 问题1解决方法:
因为 "+"是一个正则字符,必须要转义才可以使用,所以正确用法应该是这样的
String[] a1 = s.split("\\*|\\+|-|/");
"*"和 "+"都需要转义而减除不需要。
-
问题2:
-
问题2解决方法:
这个问题是我没有覆盖完接口中的方法,使得程序报错,只要我们把接口中的方法覆盖完或者删除掉多余的方法就可以解决了。
-
问题3:不知道如何计算字符串
-
问题3解决方法:
我们可以将字符串分隔开,将其里面的数转换成整数,再将字符串放到数组里,用索引找到运算是加法还是减法运算。代码如下:
package com.company;
public class script
{
private String s ;
public script(String s)
{
this.s=s;
}
public String getresult()
{
String[] a1 = s.split("\\*|\\+|-|/");
String reply = "";
int a, b, c, d;
a = Integer.parseInt(a1[0]);
b = Integer.parseInt(a1[1]);
c = Integer.parseInt(a1[2]);
d = Integer.parseInt(a1[3]);
Rational rational = new Rational(a,b );
Rational rational1 = new Rational(c,d);
int i = 0;
int n = 0;
char[] e = s.toCharArray();
for (i = 0; i < e.length; i++) {
if (e[i] == '+') {
reply = rational.add(rational1).toString();
} else if (e[i] == '-') {
reply = rational.subtract(rational1).toString();
} else if (e[i] == '*') {
reply = rational.multipy(rational1).toString();
} else if (e[i]=='/')
{
n++;
}
else if (e[i]=='/'||n==3)
{
reply = rational.divide(rational1).toString();
}
}
return reply;
}
script类是输入一个字符串给它后,它会将字符串转换成数字,然后调用rational类来计算有理数,最后再以字符串的形式返回给主函数。
代码托管
(statistics.sh脚本的运行结果截图)
上周考试错题总结
上周并无考试。
- 上周博客互评情况
- 20182334
- 结对照片
其他(感悟、思考等,可选)
- 本周时间紧迫(可能撞上了国庆),在有限的时间内学习了继承还有javasocket编程,难度颇大,让我感触最深的还是对书本的研读没有够深入,在实验中一些方法课本上都有,但是平常读书时没有认真去看。
- 通过代码学习java有着其独特的好处,可以加深我们的记忆,现将代码运行一遍,再慢慢解析理解每行代码的意义,这样更有利于我们理解代码,先从需求的角度再到用编程方法解决的角度来看代码。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 2/2 | 20/20 | |
第二周 | 300/500 | 2/4 | 18/38 | |
第三周 | 623/1000 | 3/7 | 22/60 | |
第四周 | 600/1600 | 2/9 | 22/82 | |
第三周 | 1552/2987 | 2/11 | 22/94 | |
参考:软件工程软件的估计为什么这么难,软件工程 估计方法 |
-
计划学习时间:10小时
-
实际学习时间:15小时
-
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)