1. 本周学习总结

1.1 写出你认为本周学习中比较重要的知识点关键词

关键字:继承,多态,覆盖(Override),重载(Overload),抽象类(abstract)等。

1.2 尝试使用思维导图将这些关键词组织起来。注:思维导图一般不需要出现过多的字。

1.3 可选:使用常规方法总结其他上课内容。

总结

  1. 了解了类的继承的基本语法。
  2. 明确父类与子类的关系,用关键字extends继承。
  3. 重载和覆盖的用法。
  4. 以及快捷键构造函数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周学习总结的更多相关文章

  1. 20145213《Java程序设计》第九周学习总结

    20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

  2. 20145213《Java程序设计》第二周学习总结

    20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...

  3. 20145213《Java程序设计》第一周学习总结

    20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...

  4. 21045308刘昊阳 《Java程序设计》第九周学习总结

    21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...

  5. 20145330孙文馨 《Java程序设计》第一周学习总结

    20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...

  6. 20145337 《Java程序设计》第九周学习总结

    20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...

  7. 20145337 《Java程序设计》第二周学习总结

    20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...

  8. 20145218《Java程序设计》第一周学习总结

    20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...

  9. 《Java程序设计》第九周学习总结

    20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...

  10. 《Java程序设计》第二周学习总结

    20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...

随机推荐

  1. LeetCode--003--无重复字符的最长子串(java)

    给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc&qu ...

  2. 2017-09-21xlVBA_蒸发SQL循环查询1

    'ARRAY("1991","1992","1993","1994","1996","19 ...

  3. 2019/01/17 基于windows使用fabric将gitlab的文件远程同步到服务器(git)

    觉得django项目把本地更新push到gitlab,再执行fabric脚本从gitlab更新服务器项目挺方便的,当然从本地直接到服务器就比较灵活. 2019/01/17 基于windows使用fab ...

  4. Django 权限管理(二)

    权限菜单展示 1.展示的效果 实现该效果,涉及到的核心点(突破点) 1. 权限分类: (1)菜单权限 (主要用来展示的权限(url)如查看权限 url,  如上图中的每个权限都归类为菜单权限,主要用来 ...

  5. 轮播,试用与微信公众号,apicloud苹果安卓

    <head> <script type="text/javascript" src="script/jquery.min.js">< ...

  6. 前端Vue之vue的基本操作

    1.1 vue.js的快速入门使用 vue.js是目前前端web开发最流行的工具库之一,由尤雨溪在2014年2月发布的. 另外几个常见的工具库:react.js /angular.js 官方网站: 中 ...

  7. python记录_day02 while循环 格式化 基本运算符

    一.流程控制之while循环 语法: while 条件: 循环体 else: else语句(当条件不成立的时候执行这里 和break没关系) 判断条件是否成立. 如果成立执行循环体.然后再次判断条件, ...

  8. tomcat8.5 优化

    第一步:配置user登录tomcat 参考:https://www.cnblogs.com/kevincaptain/p/10370794.html 第二步:性能优化 2.1tomcat的运行模式有3 ...

  9. 兼容IE8的video写法

    <video width="100%" height="515px" controls preload> <source src=" ...

  10. 函数使用十:COMMIT

    1)DB_COMMIT    :                    DB层的COMMIT,很少用到,大S之前说过,忘了 2)BAPI_TRANSACTION_COMMIT:COMMIT WORK/ ...