学号:201521123116 《java程序设计》第四周学习总结
1. 本周学习总结

2. 书面作业
Q1. 注释的应用
使用类的注释与方法的注释为前面编写的类与方法进行注释,并在Eclipse中查看。(截图)
答:
注释的插入:
注释以/开始,以/结束
类注释
/**
.......你要注释的内容
/

Q2.面向对象设计(大作业1,非常重要)
2.1 将在网上商城购物或者在班级博客进行学习这一过程,描述成一个故事。(不得少于50字,参考QQ群中PPT的范例)
2.2 通过这个故事我们能发现谁在用这个系统,系统中包含的类及其属性方法,类与类之间的关系。尝试找到这些类与属性,并使用思维导图描述类、属性、方法及类与类之间的关系。
2.3 尝试使用Java代码实现故事中描述的这一过程(不必很完善),将来要在这个基础上逐渐完善、扩展成一个完整的面向对象的系统。(可选:加分)
2.1答:小明平常喜欢购物,就经常在淘宝网上购物,他一般都在淘宝网首页挑选商品,买的大都是书籍,他看的一本书很是喜欢,就点进去查看书本详细信息,觉得还满意就先加入了购物车,后来又选了几本书,最后点击到购物车界面准备查看买了多少东西和多少钱,发现有点贵,就把一本书删除了。最后在网上用支付宝付完款。
2.2答:小明在用这个购物系统,包含的类有商品,书籍类商品,其他商品,商品列表,购物车,支付宝。
商品(Goods):属性有编号(id),名字(name),价格(price);
书籍类商品(Books):继承商品类所有属性,特有属性有作者(author);(其他商品(Others)类似);
商品列表(GoodsList):属性有商品(Goods),购物车(ShoppingCar),方法有搜索(search),筛选(select);
购物车(ShoppingCar):属性有商品(Goods),总价(sumPrice),数目(nummber),方法有添加(add),删除(delete);
支付界面(PayWay);属性有总价(sumPrice),方法有支付(pay);
Q3:ManagerTest.zip代码分析
分析ManagerTest.zip中的代码,回答几个问题:
3.1 在本例中哪里体现了使用继承实现代码复用?回答时要具体到哪个方法、哪个属性。
class Employee
{
public Employee(String n, double s, int year, int month, int day)
{
name = n;
salary = s;
GregorianCalendar calendar = new GregorianCalendar(year, month - 1, day);
hireDay = calendar.getTime();
}
public double getSalary()
{
return salary;
}
}
class Manager extends Employee
{
public Manager(String n, double s, int year, int month, int day)
{
super(n, s, year, month, day);
bonus = 0;
}
public double getSalary()
{
double baseSalary = super.getSalary();
return baseSalary + bonus;
}
}
其中Employee为父类,Manager为子类(Manager extends Employee);
super(n, s, year, month, day);super关键字-调用父类的构造函数Employee;
super.getSalary();super关键字-调用父类方法getSalary()。
3.2 Employee类及其子类Manager都有getSalary方法,那怎么区分这两个方法呢?
本例中子类Manager重新定义了父类Employee中已有的getSalary方法,所以如果调用父类该方法需写成super.getSalary();
对于这种情况,JVM根据调用该方法的实际对象的类型来决定选择调用哪个方法。
3.3 文件第26行e.getSalary(),到底是调用Manager类的getSalary方法还是Employee类的getSalary方法。
Manager boss = new Manager("Carl Cracker", 80000, 1987, 12, 15);
boss.setBonus(5000);
Employee[] staff = new Employee[3];
staff[0] = boss;
staff[1] = new Employee("Harry Hacker", 50000, 1989, 10, 1);
staff[2] = new Employee("Tommy Tester", 40000, 1990, 3, 15);
根据代码可得出:boss是Manager类,而staff[0] = boss;此时e.getSalary()调用Manager类的getSalary方法;
staff数组为Employee类,其中staff[1] = new Employee,staff[2] = new Employee,此时e.getSalary()调用Employee类的getSalary方法。
3.4 Manager类的构造函数使用super调用父类的构造函数实现了代码复用,你觉得这样的有什么好处?为什么不把父类构造函数中的相关代码复制粘贴到Manager的构造函数中,这样看起来不是更直观吗?
代码复用的好处:无需重新编写相同的代码,节约了时间。
因为JVM执行子类的构造函数之前,会先自动调用父类中的构造函数,其目的是帮助继承自父类的成员进行初始化操作,
也就是说创建子类时父类构造函数无论如何都会被调用,所以没有必要把父类构造函数中的相关代码复制粘贴到Manager的构造函数中。
Q4.Object类
4.1 编写一个Fruit类及属性String name,如没有extends自任何类。使用System.out.println(new Fruit());是调用Fruit的什么方法呢?该方法的代码是从哪来的?尝试分析这些代码实现了什么功能?
4.2 如果为Fruit类添加了toString()方法,那么使用System.out.println(new Fruit());调用了新增的toString方法。那么其父类中的toString方法的代码就没有了吗?如果同时想要复用其父类的toString方法,要怎么操作?(使用代码演示)
4.3 Fruit类还继承了Object类的eqauls方法。尝试分析其功能?自己编写一个equals方法覆盖父类的相应方法,功能为当两个Fruit对象name相同时(忽略大小写),那么返回true。(使用代码证明你自己覆盖的eqauls方法是正确的)
4.4 在4.3的基础上使用ArrayList
4.1.编写的代码如下
`class Fruit {
private String name;
}
public class Main {
public static void main(String[] args) {
System.out.println(new Fruit());
}
}
运行结果为:Fruit@2a139a55,调运了Fruit的toString方法呢,该方法的代码是从object类来,因为object是所有类的父类。功能就是输出“类名加上16进制的哈希码”形式字符串。
4.2.在Fruit类添加了toString()方法后的代码
class Fruit {
private String name;
public String toString() {
return "Fruit [name=" + name + "]";
//return "Fruit [name=" + name + "]\n"+super.toString();
}
}
public class Main {
public static void main(String[] args) {
System.out.println(new Fruit().toString());
}
}
调用了新增的toString方法,那么其父类中的toString方法的代码还在,如果同时想要复用其父类的toString方法,可运用super关键字,如上述代码中被注释部分,最后输出结果为:
4.3
答:Object类中的equals()方法是比较引用的,即引用相同就返回true,不同返回false。
Eclipse中自动生成的eqauls方法如下

输出结果为:
4.4
输出结果为:
ArrayList的contatins方法实现分析:根据HashCode()地址计算的值作比较,如果相同则不用添加,否则添加。
Q5.代码阅读:PersonTest.java(abstract、多态)
5.1 画出类的继承关系
5.2 读懂main函数,将自己推测的出代码运行结果与真正运行结果进行比较。尝试分析原因
5.3 子类中里面使用了super构造函数,作用是什么?如果将子类中的super构造函数去掉,行不行?
5.4 PersonTest.java中的代码哪里体现了多态?你觉得多态有什么好处?多态和继承有什么关系吗?
(5.1)类的继承关系
(5.2)建立Person()数组person[],长度为4,peoples[0]=new Employee,peoples[1] = new Student,peoples[2] = new Programmer,peoples[3] = new Manager,接着根据年龄大小,由小到大排序输出,与运行结果比较相同
(5.3)使用super方法,可以调用在子类中方法与参数相同的父类的属性和方法;不行,若是去掉,则无法继承父类中的属性或方法,用不了,导致那些继承的属性用的是默认值
(5.4)体现多态的代码:
peoples[0] = new Employee("zhang", "136", "1360", "1360@mail.com", 21, "female", 1000.0);
peoples[1] = new Student("wang", "110", "15959", "15959@163.com", 18, "male", "1");
peoples[2] = new Programmer("Gates", "usa", "911", "911@com", 59, "male", 100000.0, 50000.0);
peoples[3] = new Manager("Clark", "GE", "111", "111@mail.com", 10, "mail", 90000.1, 12000.3);
创建父类的对象可以构造多个不同的对象(不同的类),节约成本(例如求圆和长方形的面积和周长的和,可以创建一个父类class Shape(){},存放形状属性,继承方法求面积和 和 周长和,这样可以在圆和长方形中直接用super()引用这个方法,节约成本);只有子类继承父类才能在建立对象时,有多个不同的对象(多态)
3. 码云代码提交记录

4. PTA实验实验总结
(1)对toString()方法了解更加深刻;
(2)开始没理解题目意思,一直通不过,后来问了下同学,原来是用父类开数组,然后每个元素用子类去实例化,最后输出;
(3)抽象类的定义,用到abstract关键字,且抽象类是必须被继承的,在求周长和 和 面积和就可以在抽象类中定义,求周长和 和 面积和的方法代码一样,可以在抽象类Shape中编写
(4)可以通过Eclipse中自动生成的代码完成大半。
学号:201521123116 《java程序设计》第四周学习总结的更多相关文章
- Java程序设计第四周学习总结
1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. 答:①String类是final类,不能定义String的子类. ② instanceof ...
- 201871010106-丁宣元 《面向对象程序设计(java)》第四周学习总结
201871010106-丁宣元 <面向对象程序设计(java)>第四周学习总结 正文开头 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-da ...
- 杨其菊201771010134《面向对象程序设计(java)》第四周学习总结
<面向对象程序设计(java)> 第四周学习总结 第一部分:理论知识 1.类与对象 a.类(class)是构造对象的模板或蓝图.由类构造对象的过程称为创建类的实例: java中类声明的格式 ...
- 对于“2017面向对象程序设计(JAVA)第四周学习总结”存在问题的反馈
对于“2017面向对象程序设计(JAVA)第四周学习总结”存在问题的反馈 “这部分同学博文总结没有写,实验作业没有提交.”——1.关于博文作业.实验作业教学功能的正解:学习知识.暴露问题.衔接课上.2 ...
- 20155318 2016-2017-2 《Java程序设计》第九学习总结
20155318 2016-2017-2 <Java程序设计>第九学习总结 教材学习内容总结 学习目标 了解JDBC架构 掌握JDBC架构 掌握反射与ClassLoader 了解自定义泛型 ...
- 《Java程序设计》第二学习总结
<Java程序设计>第二学习总结 教材学习内容总结 类型 byte(字节) shot(短整型) int(整型) long(长整型) float(浮点型) double(双精度) char( ...
- 20145304 刘钦令 Java程序设计第二周学习总结
20145304 <Java程序设计>第2周学习总结 教材学习内容总结 java可区分基本类型和类类型(即参考类型)两大类型系统. 基本类型主要可区分为整数.字节.浮点数.字符与布尔. 整 ...
- 20145304 刘钦令 Java程序设计第一周学习总结
20145304<Java程序设计>第1周学习总结 教材学习内容总结 1995年5月23日,是公认的Java的诞生日,Java正式由Oak改名为Java. Java的三大平台是:Java ...
- 20145120黄玄曦 《java程序设计》 寒假学习总结
1和2.我对未来规划不多,我认为好好学习积累知识能帮助我应对未来的挑战,这是我的学习动力之一,此外,了解新知识满足好奇心也是我的主要的学习动力. 3.我认为专业课学习比公务员考试重要,我认为专业知识是 ...
- 201521044152<java程序设计>第一周学习总结
本周学习总结 java开发时间虽然很短,但是发展迅速,已成为现在非常流行的一门语言,很开心能有幸学习java.第一周学习了java的平台,运行环境jdk以及jrt等等新名词,还了解了eclipse的基 ...
随机推荐
- MySQL grant命令使用
MySQL 赋予用户权限命令的简单格式可概括为: grant 权限 on 数据库对象 to 用户 一.grant 普通数据用户,查询.插入.更新.删除 数据库中所有表数据的权利. grant sele ...
- JavaWeb(二)jsp运行原理,九大内置对象
JSP运行原理: 每个JSP页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理.JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet) ...
- MFC加载PNG图片并实现双缓冲
因为PNG包含Alpha通道,所以不同于BITMAP,在MFC中使用CImage类对其进行处理,通常使用load和draw成员函数. 所以标题的论述可以进一步解释为,使用CImage实现双缓冲. 通常 ...
- vue小组件练习之文字居中对齐组件
时隔多月,继续学习Vue,这次是一个组件的制作过程 先让我们来看一下组件的预期效果 上图为公司自营的一个微信商城的某一部分截图,可以看到红框内部分的文字多行与单行是居中对齐的,我们现在要做的就是使用V ...
- Charles使用(二)
Charles使用(二) 破解Charles 找到Charles应用-->右键显示包内容--->contents-->java:更换Charles.jar即可 链接: https ...
- 为什么我们要使用Async、Await关键字
前不久,在工作中由于默认(xihuan)使用Async.Await关键字受到了很多质问,所以由此引发这篇博文“为什么我们要用Async/Await关键字”,请听下面分解: Async/Await关键字 ...
- HTML,CSS,JS之间的关系
HTML,CSS,JS之间的关系 本笔记是自己在浏览了各位前辈后拼凑总结下来的知识,供自己使用消化.后面会附上各种链接地址,尊重原创 最准确的网页设计思路是把网页分成三个层次,即:结构层(HTML). ...
- 【windows】常用快捷键
浏览器 ctrl shift del 清除网页缓存 文件系统 win+e 打开文件窗口 win+r 运行命令窗口 win+l 锁定桌面 win+m 最小化窗口 ctrl+shift +n 创建文件夹
- 转载_2012年的Android之旅:梦想、学习、坚持、自信、淡定
原文地址:http://blog.csdn.net/luoshengyang/article/details/8452527 2012年的Android之旅:梦想.学习.坚持.自信.淡定.. ---- ...
- 记一次帮客户做SEO诊断:新站收录后优化一个月了,排名一直没上去
一.网站问题 新网站建设有一个多月了,一直在优化,但是网站一直没有排名,不知道什么原因.接下来针对这个网站分析一下原因. 二.诊断分析 看一下网站的基础数据,如图: < 可以看出来网站只有一个多 ...