1、本周学习总结

这次用XMind画的图,果然比百度脑图好用一点。


2、书面作业

Q1、注释的应用

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

  • 类注释

  • 方法注释

**Q2.面向对象设计(大作业1,非常重要)
2.1 将在网上商城购物或者在班级博客进行学习这一过程,描述成一个故事。(不得少于50字,参考QQ群中PPT的范例)
2.2 通过这个故事我们能发现谁在用这个系统,系统中包含的类及其属性方法,类与类之间的关系。尝试找到这些类与属性,并使用思维导图描述类、属性、方法及类与类之间的关系。**

  • 比方说想要在淘宝上买一条裙子吧。首先打开淘宝网。先随便看看淘宝广告上的优惠打折新品什么的,后来进入正题,在搜索栏输入裙子,会跳出各种各种裙:连衣裙、长裙、半身裙。。就索性直接打开裙子这一大类,然后就有各种分类:品牌、裙长、选购热点。。。还会有相关引索:是不是想找花裙子、修身打底裙子。。往下开始看商品的时候又可以进行排序搜索:按照人气、销量、信用、价格。。。点开自己比较喜欢的裙子,旁边就会展示这条裙子的各种详细信息:价格、运费、尺码、颜色。。。比较重要的还有商品评价。然后终于开开心心添加了很多裙子进购物车,进入购物车查看,就有很多商品在里面了,购物车里也会显示商品的主要信息,价格是最主要的,然后再购物车里进行各种操作,删除、添加、合计之后就结算付款输入自己的收获信息即算在淘宝上完成一次购物了。
  • 是购买者在用这个系统。

Q3.ManagerTest.zip代码分析

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

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

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

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

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

  • 首先明白代码复用的含义:子类继承父类,则子类无需无需重新编写相同的代码。

  • 如何区分:两个方法虽然名称相同,但是具体实现却不相同,Manager类对getSalary方法进行了重写。子类中可以重新定义父类中已有的方法,从而体现出子类自己的行为。
//Manager类的getSalary方法
public double getSalary()
{
double baseSalary = super.getSalary();
return baseSalary + bonus;
} //Employee类中的getSalary方法
public double getSalary()
{
return salary;
}
  • JVM根据调用该方法的实际对象的类型来决定选择调用哪个方法。





    如图所示,staff【0】是调用的Manager类的getSalary方法,有额外的bonus。

    staff【1】、staff【2】都是调用Employee类的getSalary方法,纯工资无bonus。
  • 好处:最直接的就是可以少写代码呀,很棒的。直接复制粘贴的话,直观是直观了,但是会是代码变得很冗长,本来可以化繁为简的达到统一目的,不必再多此一举重新粘贴重复的代码。所谓大道至简嘛。

**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 fruitList`存储多个fruit,要求如果fruitList中已有的fruit就不再添加,没有的就添加进去。请编写相关测试代码。并分析ArrayList的`contatins`方法是如何实现其功能的?**

> - 在Eclipse上操作一下。如图
![](http://images2015.cnblogs.com/blog/1109847/201703/1109847-20170318131512276-1771288137.png)
![](http://images2015.cnblogs.com/blog/1109847/201703/1109847-20170318131522901-1516814596.png)
![](http://images2015.cnblogs.com/blog/1109847/201703/1109847-20170318131531291-268679474.png)
![](http://images2015.cnblogs.com/blog/1109847/201703/1109847-20170318132224370-2020127645.png)
可知`System.out.println(new Fruit())`是调用了`Fruit`的`toString()`方法。该方法的代码是从`Object.class`中来的。实现了将对象表现输出的功能。

>- 父类的toString()不会消失。代码实现如图。 ![](http://images2015.cnblogs.com/blog/1109847/201703/1109847-20170318133944682-1485915108.png)

>- Object类的equals()方法源码如图。![](http://images2015.cnblogs.com/blog/1109847/201703/1109847-20170318140100776-1745665126.png)
功能有点像String类里的“==”,用来比较“地址”是否相同。若两个不同对象进行比较,即使内容相同,也会输出“fasle”。

 class Fruit {
private String name; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} @Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
} @Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Fruit other = (Fruit) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
} } public class lala {
public static void main(String[] args) {
Fruit a=new Fruit();
Fruit b=new Fruit();
a.setName("a");
b.setName("a");
System.out.println(a==b);
System.out.println(a.equals(b));
}
}





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

5.1 画出类的继承关系

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

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

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

  • 预计输出就是根据年龄大小排序(从小到大)输出四个对象。

    输出结果:



    分析:Person类是abstract修饰的,只能当爸爸。Person类在这个代码里是爸爸,Student类和Employee类是它的儿子,而Programmer类和Manager类又是Employee类的儿子,输出就是按照每个类重写的toString()方法依次输出,所以,Student类和Employee类有一层toString,Programmer类和Manager类有两层toString。
  • 作用是继承父类构造函数方法,因为有些属性是重复一样的,直接继承父类就可以少写很多代码。去掉不行,因为去掉后系统会自动调用父类的无参构造函数,而此时父类没有无参构造函数,编译出错。
  • 多态性:相同的形态,不同的行为(不同的定义)

    -相同的方法名,不同的实现

    -父类类型变量可以引用子类对象

    代码体现在:每个类对toString()方法的不同实现。如:



    多态的好处: 应用程序不必为每一个派生类编写功能调用,只需要对抽象基类进行处理即可。大大提高程序的可复用性。

    多态和继承关系:继承是多态的基础,有了继承,才能有多态。

3. 码云代码提交记录

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


4. PTA实验

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

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

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

一定要有实验总结

  • 对Employee的company属性的比较。要考虑传入为null的情况。如果company不为null且传入为null,返回false.
  • 编写double sumAllArea方法输出形状数组中的面积和和double sumAllPerimeter方法输出形状数组中的周长和。需要用到多态的方法。
  • 用super关键字调用父类方法时,该代码语句应该放在子类构造函数的第一行。

201521123074 《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. JavaScript获取和创建元素

    1.JavaScript中获取元素 常用的获取document中元素的方法: 1) document.getElementById()  =>通过元素ID获取文档中特定的元素,如获取 id = ...

  3. ubuntu14.04 64位安装H3C iNode客户端

    环境: OS:ubuntu14.04LTS 64位 iNode: iNode2.40-R0162 for linux(iNode只有32位的,而且是很久以前的版本) 安装方法: 第一种: 检查本机是6 ...

  4. String、StringBuffer与StringBuilder

    String.StringBuffer与StringBuilder之间区别 最近学习到StringBuffer,心中有好些疑问,搜索了一些关于String,StringBuffer,StringBui ...

  5. 在AWS中部署OpenShift平台

    OpenShift是RedHat出品的PAAS平台.OpenShift做为PAAS平台最大的特点是它是完全容器化的PAAS平台,底层封装了Docker和Kubernetes,上层暴露了对开发者友好的接 ...

  6. HTML,CSS,JS之间的关系

    HTML,CSS,JS之间的关系 本笔记是自己在浏览了各位前辈后拼凑总结下来的知识,供自己使用消化.后面会附上各种链接地址,尊重原创 最准确的网页设计思路是把网页分成三个层次,即:结构层(HTML). ...

  7. Ubuntu与Centos在登陆安全方面的比较

    Ubuntu在安装时创建的普通用户默认具有sudo权限,默认root没有设置密码,可以通过自建用户来执行sudo passwd 为root设置密码;Centos在安装时创建的普通用户默认没有sudo权 ...

  8. mysql 获取原数据

    show  databases show  tables information_schema show tables 语句的输出不包含temporary表   查看服务器所有数据库 >show ...

  9. 如何安装Windows 7旗舰版

    如何安装Windows 7旗舰版.. ----------------- Windows 7旗舰版安装的初始画面 ------------------------- 选择好语言后,点击“下一步”按钮, ...

  10. jmeter返回的post data乱码

    通过csv 跑出来的结果 解决方法: 在CSV Data Set Config中将File Encoding设置为GB2312将Allow quoted data 设置为true