1. 本周学习总结

1.1 尝试使用思维导图总结有关继承的知识点。

1.2 使用常规方法总结其他上课内容。

  • 1.1有关继承的知识点:

  • 1.2有关多态

  1. 多态性:相同的形态,不同的行为。体现在相同的方法名,不同的实现,和父类类型变量可以引用子类对象。
  2. 父类子类有相同 的方法,运行是编译器能自动选择调用哪个方法。
  3. 多态可以解决相同代码太多显得冗长的问题,可以动态更改少量代码达到需要。

2. 书面作业

1. 注释的应用

使用类的注释与方法的注释为前面编写的类与方法进行注释,并在Eclipse中查看。(截图)

Eclipse注释模版可以通过以下途径查看:

Window->Preferences->Java->Code Style->Code Templates->Comments

以下是一些注释:

类的注释



属性的注释



get方法的注释



set方法的注释



构造方法的注释



覆盖方法的注释

2. 面向对象设计(大作业1,非常重要)

2.1 将在网上商城购物或者在班级博客进行学习这一过程,描述成一个故事。(不得少于50字,参考QQ群中PPT的范例)

快要换季了,我打算在淘宝上购买一些衣服,于是我打开淘宝网taobao links,登录我的淘宝

登录成功后,可以看到左边的主题市场,选择女装

进入了女装市场,现在可以浏览各种女装啦!

选择连衣裙,然后就可以看到各种漂亮的连衣裙啦,然后挑中了一件喜欢的,加入购物车

在购物车里有很多我添加的物品,显示了物品的信息主要是商品名,单价,数量,还有删除等其他操作

最后是已选商品合计,然后有一个结算。不过买不起就不结算了,放购物车等宝贝失效吧。

2.2 通过这个故事我们能发现谁在用这个系统,系统中包含的类及其属性方法,类与类之间的关系。尝试找到这些类与属性,并使用思维导图描述类、属性、方法及类与类之间###的关系。

2.3 尝试使用Java代码实现故事中描述的这一过程(不必很完善),将来要在这个基础上逐渐完善、扩展成一个完整的面向对象的系统。(可选:加分)

这个系统当然是“我”,即消费者在使用,系统中可能包含的类有启动类,用于登录系统,main方法在其中,然后是主题类,商品类,购物车类等等。

3. ManagerTest.zip代码分析

分析ManagerTest.zip中的代码,回答几个问题:

3.1 在本例中哪里体现了使用继承实现代码复用?回答时要具体到哪个方法、哪个属性。

第77行使用继承Employee类的含参数(n、s、year、month、day)构造函数,

第83行使用继承Employee类的getSalary()方法,salary;

3.2 Employee类及其子类Manager都有getSalary方法,那怎么区分这两个方法呢?

子类Manager中的getSalary方法是对Employee类的getSalary方法的重载,区分方法就在于创建的是什么对象,例如如果创建的是Employee类的对象,就调用的是Employee类的getSalary方法。

3.3 文件第26行e.getSalary(),到底是调用Manager类的getSalary方法还是Employee类的getSalary方法。

有25行代码可知变量e是Employee类的指向staff数组对象,在运行时会根据staff的对象的不同,而调用相应的getSalary方法。

3.4 Manager类的构造函数使用super调用父类的构造函数实现了代码复用,你觉得这样的有什么好处?为什么不把父类构造函数中的相关代码复制粘贴到Manager的构造函数中,###这样看起来不是更直观吗?

可以少些代码,不用增加多余数据,节省时间,增加程序的实用性;JVM执行子类的构造函数之前,会先自动调用父类中的构造函数,其目的是帮助继承自父类的成员进行初始化的操作。所以,如果把父类构造函数中的相关代码复制粘贴到Manager的构造函数中就会出错,要么就让Manager类不继承Employee类,Manager的构造函数重新完整定义,但是这样明显更费时费力,所以不建议这样改,应使用继承实现代码复用。

4. Object类

4.1 编写一个Fruit类及属性String name,如没有extends自任何类。使用System.out.println(new Fruit());是调用Fruit的什么方法呢?该方法的代码是从哪来的?尝试分析这些代码实现了什么功能?

输出结果是Fruit@75a1cd57

我们把第6行换成System.out.println(new Fruit().toString());发现输出结果不变。

在jdk6.ZN_zn.chm中可查得println关于对象的实现:



可见最终返回的是Fruit.toString()的值。

4.2 如果为Fruit类添加了toString()方法,那么使用System.out.println(new Fruit());调用了新增的toString方法。那么其父类中的toString方法的代码就没有了吗?如果同###时想要复用其父类的toString方法,要怎么操作?(使用代码演示)

子类的任何操作不会改变父类,父类的toString方法仍然存在,而子类也有一个toString方法,是子类特有的方法。演示如下:



输出结果为Fruit [name=null]Food [name=null],因为并没有赋值,所以name都为null

如果先要同时复用父类的toString方法,可以在第15行这样改:

输出结果为

Fruit [name=null]
Fruit@3d012ddd

4.3 Fruit类还继承了Object类的eqauls方法。尝试分析其功能?自己编写一个equals方法覆盖父类的相应方法,功能为当两个Fruit对象name相同时(忽略大小写),那么返回###true。(使用代码证明你自己覆盖的eqauls方法是正确的)



有一个简便的方法让Eclipse自动生成equals方法,同时按住shift+alt+s键,选择Generate hashCode() and equals()...就有现成的equals方法了。

应要求name忽略大小写,所以在第29行把name.equals()改成name.equalsIgnoreCase(),其他不变。

输出结果:

4.4 在4.3的基础上使用ArrayList fruitList存储多个fruit,要求如果fruitList中已有的fruit就不再添加,没有的就添加进去。请编写相关测试代码。并分析###ArrayList的contatins方法是如何实现其功能的?

5. 代码阅读:PersonTest.java(abstract、多态)

5.1 画出类的继承关系

5.2 读懂main函数,将自己推测的出代码运行结果与真正运行结果进行比较。尝试分析原因

输出结果,且运行有Debug

people 5000.0
j=0

5.3 子类中里面使用了super构造函数,作用是什么?如果将子类中的super构造函数去掉,行不行?

复用父类的构造函数的代码,如果去掉,就会显示错误Implicit super constructor Person3() is undefined. Must explicitly invoke another constructor,当然可以把父类的构造函数的代码再写一遍,但是会显得代码冗长,因此不能去掉super函数。

5.4 PersonTest.java中的代码哪里体现了多态?你觉得多态有什么好处?多态和继承有什么关系吗?

  • 每一个类中都有public String toString()函数;
  • 父类类型变量引用子类对象:
Employee3 [] people=new Employee3[5];
Person3 p=new Student3("lisi","putian","88","12","23","male","high");
people[0]=new Employee3("lisi","putian","88","12","23","male","school",5000.0,"365天");
people[1]=new Employee3("wangwu","putian","89","12","23","fmale","school",500.0,"36天");
people[2]=new Employee3("wen","putian","88","12","23","male","school",5000.0,"365天");
people[3]=new Employee3("yang","putian","89","12","23","fmale","school",50000.0,"36天");
  • 多态的表现形式有重载和覆盖两种形式。重载表现为一个类中可以有两个或更多的函数,叫同一个名字而他们的参数不同。覆盖只能发生在子类中也就是说必须有继承的情况下才有覆盖发生。 继承一个类,也就有了父类的全部方法,如果有些方法功能要变,那就把那个函数在子类中重新实现一遍。这样再调用这个方法的时候,就是执行子类的过程,父类中的函数就被覆盖了。

  • 继承是子类继承父类中所以的属性和方法,多态是父类引用可以是子类对象,我们在方法中接收父类类型作为参数,在方法实现中调用父类类型的各种方法,当把子类作为参数传递给这个方法时,java虚拟机会根据实际创建的对象类型,调用子类中相应的方法,也就是编译时看父类,运行时看子类。

3. 码云代码提交记录

在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图

4. PTA实验

题目集:jmu-Java-03-面向对象1-基础-封装继承 中的

函数(4-1, 4-2, 4-3,4-4较难选做)

编程(5-4, 5-5, 5-6)

  • 通过继承可以大大节省代码,实现动态捆绑
  • 子类继承父类的全部属性和方法,如果子类需要实现功能改变,就重写父类的方法。

201521123007《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. 一次关于mongodb性能踩坑的总结

    发现性能问题 上一次导入数据后,发现系统十分的卡顿,但是才仅仅1000多条数据而已,怎么会让系统变得如何的卡顿呢?于是我开始走在排查系统卡顿的原因的道路上. 首先,先定位问题是出现在前端上还是后端上. ...

  2. 迷宫 洛谷 p1605

    题目背景 迷宫 [问题描述] 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和 终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫 中移动有上下 ...

  3. fstab设置开机挂载--鸟哥[阅读]

    設定開機掛載: 手動處理 mount 不是很人性化,我們總是需要讓系統『自動』在開機時進行掛載的!本小節就是在談這玩意兒! 另外,從 FTP 伺服器捉下來的映像檔能否不用燒錄就可以讀取內容?我們也需要 ...

  4. nRF24LE1/nRF31512烧录驱动开发

    一丶协议分析 这两种芯片都是programming through SPI,烧录要用到的引脚有 SPI_MOSI_Port :数据输入: SPI_MISO_Port :数据输出: SPI_SCLK_P ...

  5. unity slua整合帅气的lua-pb解析protobuf

    了解到lua的一个protobuf库,接口帅气,比之前用过的一些lua protobuf库要好很多,深得我心.而且能保持更新,比其他库几年没更新要放心. lua-pb动态解析protobuf协议,无需 ...

  6. DataSet 转 List

    public class OrderInfo { public OrderResult GetOrderInfoByOrderNum(List<string> orderNumList) ...

  7. mysql 5.7 怎么修改默认密码、随机密码

    当你使用 mysql -u root -p 登陆mysql的时候,提示下方要输入密码.而这个密码不是我们刚刚安装mysql时设置的那个密码.而且安装完mysql 生成的随机密码 那么我们在哪里找到这个 ...

  8. nGrinder 简易使用教程

    背景 性能压测工具之前使用的是jmeter,这次说的是nGrinder,先直接搬运两者之间的比较 比较点 JMeter nGrinder 结果 实现语言 Java Java = License Apa ...

  9. 【Ubuntu 16】安装nginx

    近年来,nginx服务器程序由于负载均衡.反向代理.适于高并发的特性,获得越来越多互联网企业的青睐.在此为大家奉上nginx的安装过程,以供参考. 一.安装nginx 1.安装gcc\g++库 sud ...

  10. Eclipse字体颜色的设置方法

    Eclipse字体颜色的设置方法.. ----------------- .---------------------此时我们就希望设置一下字体eclipse字体颜色,让他像其它编辑器一样的,有不同的 ...