20155335俞昆 2018-2019-2 《Java程序设计》第四周学习总结
20155335俞昆 2018-2019-2 《Java程序设计》第四周学习总结
教材学习内容总结
1.子类和父类
首先要明白子类和父类的区别和联系,即由继承得到的类为子类,被继承的类为父类,子类只能有一个父类。声明类时,通过使用关键字extends来定义一个类的子类。格式如下
Class 子类名 extends 父类名{
。。。
}
子类具有继承性,什么叫做继承,即子类继承父类的成员变量作为自己的一个成员变量,可以被子类中自己定义的任何实例或方法操作。如果子类与父类在同一个包中,则子类自然地继承了其父类中不是private的方法作为自己的方法,继承的成员变量或方法的访问权限不变。如果字符类不在同一包中,父类中的private和友好访问权限的成员变量不会被子类继承。
子类构造方法创建一个子类的对象时,不仅子类中声明的成员变量被分配了内存,对父类的成员变量都分配了内存空间,但是子类不能继承父类的私有成员变量。如果子类与父类不在同一个包中,子类不继承父类的友好成员变量。子类ChinaPeople的对象调用继承的方法操作未被子类继承但分配了内存空间的变量。运行效果如下
class People {
+ private int averHeight = 166;
+ public int getAverHeight() {
+ return averHeight;
+ }
+}
+class ChinaPeople extends People {
+ int height;
+ public void setHeight(int h) {
+ // height = h+averHeight;
+ height=h;
+ }
+ public int getHeight() {
+ return height;
+ }
+}
+public class Example5_2 {
+ public static void main(String args[]) {
+ ChinaPeople zhangSan = new ChinaPeople();
+ System.out.println("子类对象为继承的averageHeight的值是:"+zhangSan.getAverHeight());
+ zhangSan.setHeight(178);
+ System.out.println("子类对象的实力变量height的值为:"+zhangSan.getHeight());
+ }
+}
+
2.成员变量的隐藏
在编写子类时,我们仍然可以声明成员变量,如果声明的变量成员变量的名字和从父类继承来的成员变量的名字相同,子类就会隐藏所继承的成员变量,子类隐藏继承的成员变量有两个特点,即子类对象以及子类自己定义的方法操作与父类同名的成员变量是指子类重新声明的这个成员变量。子类对象仍然可以调动父类继承的方法操作被子类隐藏的成员变量,即子类继承的方法所操作的成员变量一定是被子类继承或隐藏的成员变量。
下列例子将演示货物价格的计算。
+public class CheapGoods extends Goods {
+ public int weight;
+ public void newSetWeight(int w) {
+ weight = w;
+ System.out.println("int心的weight="+weight);
+ }
+ public double newGetPrice() {
+ double price = weight*10;
+ return price;
+ }
+}
+
+
+public class Example5_3 {
+ public static void main(String args[]) {
+ CheapGoods cheapGoods = new CheapGoods();
+ cheapGoods.newSetWeight(198);
+ System.out.println("对象cheapGoods的weight的值是:"+cheapGoods.weight);
+ System.out.println("cheapGoods用子类新增优惠方法计算价格:"+cheapGoods.newGetPrice());
+ cheapGoods.oldSetWeight(198.987);
+ System.out.println("cheapGoods使用继承的方法计算价格:"+cheapGoods.oldGetPrice());
+ }
+}
+
+public class Goods {
+ public double weight;
+ public void oldSetWeight(double w) {
+ weight = w;
+ System.out.println("double心的weight="+weight);
+ }
+ public double oldGetPrice() {
+ double price = weight*10;
+ return price;
+ }
+}
+
+
运行结果为:
3.方法重写
重写即子类中定义一个方法,这个方法的类型和父类的方法的类型一致或者是父类的方法的类型的子类型。子类通过重写可以隐藏继承的方法,可以把父类的状态和行为改变为自身的状态和行为。如图所示,子类重写了父类的enterRule()方法,运行效果如下图:
+public class Example5_4 {
+ public static void main(String args[]) {
+ double math = 62,english=76.5,chinese=67;
+ ImportantUniversity univer = new ImportantUniversity();
+ univer.enterRule(math,english,chinese);
+ math=91;
+ english=82;
+ chinese=86;
+ univer.enterRule(math,english,chinese);
+ }
+ }
+
+public class ImportantUniversity extends University{
+ void enterRule(double math,double english,double chinese) {
+ double total = math+english+chinese;
+ if(total>=220)
+ System.out.println(total+"分数达到重点大学录取线");
+ else
+ System.out.println(total+"分数未达到重点大学录取线");
+ }
+}
+
+public class University {
+ void enterRule(double math,double english,double chinese){
+ double total = math+english+chinese;
+ if(total>=180)
+ System.out.println(total+"分数达到大学录取线");
+ else
+ System.out.println(total+"分数未达到大学录取线");
+ }
+}
+
4.super关键字
用super操作了被隐藏的成员变量和方法时,如果子类一旦隐藏了继承的成员变量,那么子类创建的对象就不在拥有该变量,该变量将归关键字super所拥有,同样,子类一旦隐藏了继承的方法,那么子类创建的对象就不能调用被隐藏的方法,该方法的调用由关键字super负责。下面的例子中,子类使用super访问和调用被子类隐藏的成员变量和方法,该代码及其运行结果如下图:
+class Sum {
+ int n;
+ float f() {
+ float sum=0;
+ for(int i=1;i<=n;i++)
+ sum=sum+i;
+ return sum;
+ }
+}
+class Average extends Sum {
+ int n;
+ float f() {
+ float c;
+ super.n=n;
+ c=super.f();
+ return c/n;
+}
+float g() {
+ float c;
+ c=super.f();
+ return c/2;
+ }
+}
+public class Example5_7 {
+ public static void main(String args[]) {
+ Average aver = new Average();
+ aver.n=100;
+ float resultOne=aver.f();
+ float resultTwo=aver.g();
+ System.out.println("resultOne="+resultOne);
+ System.out.println("resultTwo="+resultTwo);
+ }
+}
+
代码调试中的问题和解决过程
教材学习中的问题和解决过程
参考http://www.cnblogs.com/rocedu/p/6766748.html 编程实现输入平方倒置的功能
代码如下:
public class ArraySquareReverse{
public static void main(String[] args){
//int len=args.length;
//这里要求出args参数的个数,用args.length得出
int x;
//定义x作为将结果输出
for(int i=args.length-1;i>=0;i--){
//从后忘前输出
x=Integer.parseInt(args[i]);
//将参数从字符类型转换为整数类型
System.out.print(x*x);
System.out.print(' ');
}
System.out.println();
}
}
运行结果如下图:
当我输入五个值时,有:
[代码托管]https://www.cnblogs.com/yukungbhy/
评分标准
1.正确使用Markdown语法(加1分):
不使用Markdown不加分
有语法错误的不加分(链接打不开,表格不对,列表不正确...)
排版混乱的不加分
2.模板中的要素齐全(加1分)
缺少“教材学习中的问题和解决过程”的不加分
缺少“代码调试中的问题和解决过程”的不加分
代码托管不能打开的不加分
缺少“结对及互评”的不能打开的不加分
缺少“上周考试错题总结”的不能加分
缺少“进度条”的不能加分
缺少“参考资料”的不能加分
3.
教材学习中的问题和解决过程, 一个问题加1分
4.
5.
代码调试中的问题和解决过程, 一个问题加1分
6.
7.本周有效代码超过300分行的(加2分)
一周提交次数少于20次的不加分
8.其他加分:
周五前发博客的加1分
感想,体会不假大空的加1分
排版精美的加一分
进度条中记录学习时间与改进情况的加1分
有动手写新代码的加1分
课后选择题有验证的加1分
代码Commit Message规范的加1分
错题学习深入的加1分
点评认真,能指出博客和代码中的问题的加1分
结对学习情况真实可信的加1分
9.扣分:
有抄袭的扣至0分
代码作弊的扣至0分
迟交作业的扣至0分
点评模板:
博客中值得学习的或问题:
该同学把老师上课讲过的重点列了出来,体现了自己重点学习的过程。
感觉感悟那一块的内容可以再具体一点,比如说具体遇到什么问题,如何解决,从中收获了什么,或是教材学习中增长的关于调试代码的经验。
代码中值得学习的或问题:
无
基于评分标准,我给本博客打分:11分。
得分情况如下:正确使用Markdown语法(加1分);
模板中的要素齐全(加1分);
教材学习中的问题和解决过程x2;
代码调试中的问题和解决过程(加1分);
本周有效代码超过300分行的(加2分);
周五前发博客的加1分;
进度条中记录学习时间与改进情况的加1分;
点评认真,能指出博客和代码中的问题的加1分;
结对学习情况真实可信的加1分;
点评过的同学博客和代码
本周结对学习情况
结对照片
结对学习内容
XXXX
XXXX
...
上周博客互评情况(只要链接,具体点评放相应博客下)
本周首次进行结对学习。
感悟
1、在编译运行代码时,有多个源文件的只用编译运行含主类的源文件即可;
2、在书上有很多地方提示你可以自行更改程序,以便对比区别来达到学习的目的,看书要仔细;
3、根据博客园班级中一位同学的博客,对虚拟机的共享粘贴板进行了设置,实现了可以双向复制粘贴,为学习提供了很大便利。
学习进度条
代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
第一周 0 0
第二周 176 0
第三周 310 0
第四周 887 1/1