201621123001《Java程序设计》第4周学习总结
1. 本周学习总结
1.1 写出你认为本周学习中比较重要的知识点关键词
关键字:继承,多态,覆盖(Override),重载(Overload),抽象类(abstract)等。
1.2 尝试使用思维导图将这些关键词组织起来。注:思维导图一般不需要出现过多的字。
1.3 可选:使用常规方法总结其他上课内容。
总结:
- 了解了类的继承的基本语法。
- 明确父类与子类的关系,用关键字extends继承。
- 重载和覆盖的用法。
- 以及快捷键构造函数
alt+shift+s
等。
2. 书面作业
1. 面向对象设计(大作业1-该作业将作为以后其他作业的基础,请务必完成)
1.1 讲故事:用50字以上讲一个你在网上商城购物或者在班级博客进行学习的故事。使用Markdown的加粗标记把关键名词标注出来,使用语句块标记
把里面关键的动词标注出来。讲故事范例:见参考资料UML类
图中如何绘制类图
Answer:
- 需求描述:小张想在宿舍囤一点零食,于是
打开
了淘宝选择
了了“百草味旗舰店”店铺,按照店铺零食类别,依次浏览
了坚果炒货、果干蜜饯、肉干肉脯、糕点糖果,将喜欢的分别加入
购物车,可是由于资金有限,决定删除
一部分,最后下单,付款成功。
1.2 找出系统中包含的类及其属性、方法,类与类之间的关系,并绘制相应类图。注意:不一定非要体现继承关系。只要能将系统描述完整即可。一开始设计的时候不要考虑太多,不要出现太多的类,仅出现必要的类,完成最小功能即可。对商城购物系统建议只做购物车模块。
类及属性、方法:(筛选完后有)
零食 、坚果炒货类、 果干蜜饯类、肉干肉脯类、糕点糖果类、浏览记录、购物车添加与删除。
类与类之间关系如图:
1.3 使用Java代码实现这个系统(不必很完善)。粘贴运行截图与关键代码。将来要在这个基础上逐渐完善、扩展成一个完整的面向对象的系统。合作完成:2-3人一个小组。
//这是所有零食
class Snakes {
String name;
String price;
String type;
int amount;
public Snakes(String name, String price, String type, int amount) {
this.name = name;
this.price = price;
this.type = type;
this.amount = amount;
}
}
class Nut extends Snakes {
public Nut(String name, String price, String type, int amount) {
super(name, price, type, amount);
}
/*
* other also can add
*/
}
class Meat extends Snakes {
public Meat(String name, String price, String type, int amount) {
super(name, price, type, amount);
}
/*
* other also can add
*/
}
class Goodies extends Snakes {
public Goodies(String name, String price, String type, int amount) {
super(name, price, type, amount);
}
/*
* other also can add
*/
}
class Fruit extends Snakes {
public Fruit(String name, String price, String type, int amount) {
super(name, price, type, amount);
}
/*
* other also can add
*/
}
//Shoppingcart类
public class Shoppingcart {
private Snakes snakes;
private void add()
{
//……;
}
private void delete()
{
//……;
}
private void purchase(){
// int cost = snakes.price * snakes.amount;
}
}
可选:团队协作可使用git与码云。在码云中新建项目。所有队员都应在码云中该项目下均应有有提交记录。截图你们的提交记录。
2. ManagerTest.zip代码分析(继承、多态)
分析ManagerTest.zip中的代码,回答几个问题:
2.1 简述文件中表现出的继承关系。哪些是共有方法,哪些是子类特有的属性和方法?
Answer:
文件中Employee是父类,Manager为子类,Manager类继承Employee类。
共有方法:父类Emplyoyee中声明为public的方法就是共有方法,例如:
public Employee(String n, double s, int year, int month, int day)
public String getName()
public double getSalary()
public Date getHireDay()
public void raiseSalary(double byPercent)
子类特有的属性和方法:就是在子类自己内部的,例如:
public Manager(String n, double s, int year, int month, int day)
public double getSalary()
public void setBonus(double b)
特有属性声明为:private double bonus
2.2 文件第26行 e.getSalary()
,到底是调用Manager类的还是Employee类的getSalary方法?
Answer:
运行代码:
运行结果:
- 根据代码运行结果来看,staff[0]输出的是Manager类,而staff[1]和staff[2]输出的都是Employee类,因此,staff[0]调用Manager类的getSalary,而staff[1]和staff[2]调用Employee类的getSalary方法。
2.3 Manager
类的构造函数使用super
调用父类的构造函数实现了代码复用,这样有什么好处?为什么不把父类构造函数中的相关代码复制粘贴到Manager的构造函数中,这样看起来不是更直观吗?
Answer:
super可以直接调用父类函数,由于子类无法继承父类的有参构造函数,就需要super关键字来调用。
直接复制粘贴纵然直观,但是super的使用方便了许多啊,完美的解决了代码重复的问题,对后期需要补充修改也方便更不易出错。
3. Object类中的toString与equals
3.1 编写Fruit
类,属性String name
。如果覆盖其toString()
方法,其父类中的toString方法的代码就没有了吗?编写Fruit的toString()
方法,在该方法中要将调用父类的toString
方法得到的字符串与自己特有的属性name
拼接起来,怎么编写?(使用代码展示)
Answer:父类的toString方法代码依然存在,只是被覆盖了。
代码展示:
public String toString() {
return super.toString() +" \t" +"Fruit{" + "name = "+ name + '}';
}
运行结果:
3.2 为Fruit
类编写equals方法覆盖父类相应方法,功能为当两个Fruit对象name相同时(忽略大小写),返回true
。(使用代码证明你自己覆盖的equals方法是正确的)
Answer:
equals方法代码:
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Fruit fruit = (Fruit) o;
return name != null ? name.equalsIgnoreCase(fruit.name) : fruit.name == null;//用equalsIgnoreCase方法来忽略大小写
}
证明:
public static void main(String[] args) {
Fruit fruit1 = new Fruit("name");
Fruit fruit2 = new Fruit("Name");
System.out.println(fruit1.equals(fruit2));
}
输出:
3.3 完成3.2后,使用ArrayList<Fruit> fruitList
存储多个fruit,添加时要求如果要添加的fruit对象在fruitList中已存在就不添加,不存在就添加。编写相关测试代码。并分析ArrayList的contains
代码与equals
方法有何关系?
Answer:
测试代码:
public class Main5 {
public static void main(String[] args) {
ArrayList<Fruit> fruitArrayList = new ArrayList<Fruit>();
Fruit[]fruits = new Fruit[10];
fruits[0] = new Fruit("apple");
fruits[1] = new Fruit("Apple");
fruits[2] = new Fruit("apPle");
fruits[3] = new Fruit("orange");
fruits[4] = new Fruit("Orange");
fruits[5] = new Fruit("banana");
fruits[6] = new Fruit("pear");
fruits[7] = new Fruit("pEAr");
fruits[8] = new Fruit("bananA");
fruits[9] = new Fruit("apple");
for (int i = 0; i < 10; i++) {
if (!fruitArrayList.contains(fruits[i]))
{
fruitArrayList.add(fruits[i]);
}
}
System.out.println(fruitArrayList);
}
}
运行结果:
- ArrayList的
contains
代码与equals
关系:
查看contains:
可以发现,在contains的内部调用了equals的方法,因此我认为可以说是一种包含关系,直接使用contains方法解就可以直接判断该列表中是否包含该元素。
提示:直接使用ArrayList的contains方法实现判断对象是否存在。
4. 实验总结:
4.1 PTA编程题(形状-继承)。并回答:在本题中使用多态为编程带来了什么好处。
Answer:在本题中,要求Rectangle与Circle类继承自Shape类,改进了7-3代码冗杂的情况,只需要在各自子类中编写鸽子的面积函数。多态带来的好处最显著的就是消除了类型之间的相互影响的关系,并且在后续需要修改的时候也更灵活。
4.2 PTA编程题(覆盖)。并回答:编写eqauls方法是需要注意些什么?
Answer:编写equals方法时候需要考虑周全,不要遗漏。主要就是容易遗漏了null的情况。
4.3 程序填空、函数题(1-3)。
Answer:
6-1 直接用super调用父类的toString。
6-2 本题很明确,根据题目要求一步一步来,注意是倒序输出数组判断null则不输出。
6-3 本题要求写equals方法,用自动生成后还要去修改slary的部分。
3. 码云及PTA
题目集:[jmu-Java-03-面向对象1-基础-封装继承]
3.1. 码云代码提交记录
- 在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图
3.2 截图PTA题集完成情况图
本周完成(形状-继承,覆盖)
需要有两张图(1. 排名。2.PTA提交列表)
3.3 统计本周完成的代码量
周次 | 总代码量 | 新增代码量 | 总文件数 | 新增文件数 |
---|---|---|---|---|
1 | 374 | 374 | 5 | 5 |
2 | 889 | 515 | 15 | 10 |
3 | 1417 | 528 | 22 | 7 |
4 | 1838 | 421 | 27 | 5 |
需要将每周的代码统计情况融合到一张表中。
201621123001《Java程序设计》第4周学习总结的更多相关文章
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 20145213《Java程序设计》第二周学习总结
20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...
- 20145213《Java程序设计》第一周学习总结
20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 20145330孙文馨 《Java程序设计》第一周学习总结
20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...
- 20145337 《Java程序设计》第九周学习总结
20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...
- 20145337 《Java程序设计》第二周学习总结
20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...
- 20145218《Java程序设计》第一周学习总结
20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...
- 《Java程序设计》第九周学习总结
20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...
- 《Java程序设计》第二周学习总结
20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...
随机推荐
- English trip V1 - 20.Look at me 看着我 Teacher:Solo Key: 声调(英语默认就声调[rising]和降调[falling]两种)
In this lesson you will learn to describe a person. 课上内容(Lesson) appearance -> ap pea ran ce 外貌 ...
- 自定义广播(BroadcastReceiver)事件 --Android开发
本例演示自定义广播事件.我们需要做的是,在主活动中写发送广播的代码,然后在接收广播的类中写接收广播的代码. 1.主活动中点击按钮后发送广播 MainActivity.java: public clas ...
- Python Web简单加法器的实现--Python
坚持写博客来记录学习过程,哪怕学习的东西多么简单!下面是python中cgi相关知识. Template.py:(模板引擎文件) #模板引擎def start_response(resp=" ...
- sgu 169 Numbers
题意:n和n+1同时被数位乘积整除的k位数个数. 假如a是237,b是238.由于个位以前的数一样.那么对于2,如果a%2==0,b%2就!=0,如果a%3==0,b%3就!=0.因此个位以前的数只能 ...
- Confluence 6 有关空间的一些提示
如果你已经为你的整个 Confluence 站点设置了特定主题(例如文档或者其他第三方的主题),你创建的空间将会集成你需要主题.如果你没有使用默认主题的话,你可能不能在边栏中看见蓝图. Conflue ...
- JS中循环逻辑和判断逻辑的使用实例
源代码见: https://github.com/Embrace830/JSExample &&和||的理解 a || b:如果a是true,那么b不管是true还是false,都返回 ...
- python基础之函数名的使用,闭包以及迭代器
内容梗概: 1. 函数名的使⽤用以及第⼀一类对象 2. 闭包 3. 迭代器 1.函数名一. 函数名的运⽤.函数名是一个变量, 但它是⼀个特殊的变量, 与括号配合可以执行函数的变量.1.1 函数名的内存 ...
- php的符号的排序大小
- bzoj3876: [Ahoi2014&Jsoi2014]支线剧情
题意:给一幅图,从1开始,每条边有边权最少走一遍,可以在任意点退出,问最小花费 题解:上下界费用流,每个边都流一遍,然后为了保证流量平衡,新建源点汇点,跑费用流把流量平衡 /************* ...
- Mysql优化要点
优化MySQL Mysql优化要点 慢查询 Explain mysql慢查询 注意事项 SELECT语句务必指明字段名称 SELECT *增加很多不必要的消耗(cpu.io.内存.网络带宽):增加了使 ...