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. 解决IIS7虚拟目录出现HTTP 错误 500.19(由于权限不足而无法读取配置文件)的问题

    今天在windows 7笔记本上搭建一个ASP.NET网络平台,启动IIS 7 时候出现错误: 错误摘要HTTP 错误 500.19 - Internal Server Error无法访问请求的页面, ...

  2. webpack+vue多入口环境搭建

    项目地址:https://pan.baidu.com/s/1c1Dflp2 使用前提:安装nodejs环境,webpack的配置官网的例子跟着跑一遍,会vue开发 研究webpack+vue研究了一个 ...

  3. java.lang.IllegalArgumentException: Service Intent must be explicit 解决办法

    java.lang.IllegalArgumentException: Service Intent must be explicit 意思是服务必须得显式的调用 我之前是这样使用绑定Service的 ...

  4. android -------- Data Binding的使用 ( 四 )ListView

    今天来说说DataBinding在列表ListView中的使用 主要分为两种,1: 基本的实体类  2:Observable 定义字段 listView布局文件 <?xml version=&q ...

  5. 架构探险笔记11-与Servlet API解耦

    Servlet API解耦 为什么需要与Servlet API解耦 目前在Controller中是无法调用Servlet API的,因为无法获取Request与Response这类对象,我们必须在Di ...

  6. 使用absolute布局

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. 利用phpqrcode二维码生成类库和imagecopymerge函数制拼接图片的经验

    前期准备 引入phpqrcode类库(下载地址:https://sourceforge.net/projects/phpqrcode/) PHP开启GD扩展库支持 1.利用phpqrcode生成二维码 ...

  8. Luffy之Xadmin以及首页搭建(轮播图,导航)

    1. 首页 1.1 轮播图 admin站点配置支持图片上传 pip install Pillow 默认情况下,Django会将上传的图片保存在本地服务器上,需要配置保存的路径.我们可以将上传的文件保存 ...

  9. HDU - 4780费用流

    题意:M台机器要生产n个糖果,糖果i的生产区间在(si, ti),花费是k(pi-si),pi是实际开始生产的时间机器,j从初始化到生产糖果i所需的时间Cij,花费是Dij,任意机器从生产糖果i到生产 ...

  10. 四则运算Java语言实验设计过程1

    题目要求: 像二柱子那样,花二十分钟写一个能自动生成三十道小学四则运算题目的 “软件”.要求:除了整数以外,还要支持真分数的四则运算(需要验证结果的正确性).题目避免重复.可定制出题的数量. 设计思路 ...