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. iOS 折线图实现

    图表绘制的过程实际上是坐标位置的计算过程,至于画线只要有了position,通过CAShapeLayer+BezierPath很快就可以画出来,这里提供一个绘制折线的demo,贵在思路,有需要的可以参 ...

  2. python------函数嵌套及作用域链

    1.三元运算if条件成立的结果 if 条件 else 条件不成立的结果例如: a=20 b=10 c=a if a>b else b print(c) 2.命名空间 全局命名空间:创建的存储&q ...

  3. 剑指offer——矩阵覆盖(斐波那契变形)

    ****感觉都可以针对斐波那契写一个变形题目的集合了****** 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? cl ...

  4. 齐博cms 7.0 漏洞分析

    ** 0x01 原理分析 ** 还是很早之前爆出来的漏洞,现在拿出来学习一下,参考阿里巴巴: https://security.alibaba.com/... 漏洞发生在/inc/common.inc ...

  5. 《高性能Mysql》翻译错误

    原文中在分区表中的一句话翻译错误,如下 应该是[扫描列a上的索引就需要扫描每一个分区内对应的索引树],英文版描述如下: ''' Suppose you define an index on a and ...

  6. SQL用法笔记

    1.更改当前记录以外的数据的xh自动加1(MySQL字段为int) String sql = "UPDATE t_readtext as tr SET xh = xh +1\n" ...

  7. Zim学习笔记 (Fedora)

    俗话说好记性不如烂笔头, 对于一个搞IT的人来说最好的笔毫无疑问就应该是电脑了, 但最好的本呢? 之前一直在找一款适合自己的笔记软件, 找来找去只有Zim适合自己, 当然对于有编辑器之神之美誉的ema ...

  8. 编译安装 Nginx1.12.1

    本文描述Nginx 的源码编译安装过程 ############## 一.安装OpenSSL ###################### 下载地址 https://www.openssl.org/s ...

  9. VMware Workstation 12 Pro 之安装林耐斯CentOS X64系统

    VMware Workstation 12 Pro 之安装林耐斯CentOS X64系统... -------------- --------------------------- --------- ...

  10. Vim 命令图解-Gvim使用笔记-2017-5-9

    Vim 命令图解-Gvim使用笔记... 图片要是看的不太清楚推荐使用:鼠标右键在新标签中打开或是全屏看图 Vim中常用的一些速查命令: Vim发展历史:1976年Bill Joy开发了vi1988 ...