201521123048 《Java程序设计》第4周学习总结
1. 本周学习总结
1.1 尝试使用思维导图总结有关继承的知识点。

1.2 使用常规方法总结其他上课内容。
1.多态:使用单一接口操作多种类型的对象。 2.private修饰属性,public修饰方法。 3.关键字的了解和应用。
2. 书面作业
1.注释的应用
使用类的注释与方法的注释为前面编写的类与方法进行注释,并在Eclipse中查看。(截图)
注释格式


2.面向对象设计(大作业1,非常重要)
2.1 将在网上商城购物或者在班级博客进行学习这一过程,描述成一个故事。(不得少于50字,参考QQ群中PPT的范例)
网购:首先搜索所要的商品,在Shopping类在中,找到商品这个属性(商品属性包括商品的名称,价格,商品的样图和发货地),要买的话,就加入购物车,用到Shopping类中的shopcar属性(包含所加入的商品的单价,购买的个数),在购物车中查看订单情况,若不想付款购买的话,可删去订单,计算总共的费用时,在Shopping类的total方法中计算各类商品的总价格,返回总价格,确认无误后支付金额完成购物。
2.2 通过这个故事我们能发现谁在用这个系统,系统中包含的类及其属性方法,类与类之间的关系。尝试找到这些类与属性,并使用思维导图描述类、属性、方法及类与类之间的关系。

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

super()调用了父类方法。super(n,s,year,month,day)指调用父类的有参构造函数,super.getSalary()调用了父类同名的方法。父类的所有属性都被子类继承,有name、salary、hireDay,调用父类的构造器来完成子类的name、salary、year、month、day对象的初始化。
3.2 Employee类及其子类Manager都有getSalary方法,那怎么区分这两个方法呢?
编译器搜索getsalary签名的类
3.3 文件第26行e.getSalary(),到底是调用Manager类的getSalary方法还是Employee类的getSalary方法。
由图可知getSalary是调用Employee方法

3.4 Manager类的构造函数使用super调用父类的构造函数实现了代码复用,你觉得这样的有什么好处?为什么不把父类构造函数中的相关代码复制粘贴到Manager的构造函数中,这样看起来不是更直观吗?
好用啊,少敲了一些代码,看上去也没有那么繁琐,也能够体现类之间的层次关系。直接复制代码是比较直观,不过有更简便的super方法。
4.Object类
4.1 编写一个Fruit类及属性String name,如没有extends自任何类。使用System.out.println(new Fruit());是调用Fruit的什么方法呢?该方法的代码是从哪来的?尝试分析这些代码实现了什么功能?

调用Fruit类的是toString方法。代码来自Object类, 功能是输出了该对象的地址
4.2 如果为Fruit类添加了toString()方法,那么使用System.out.println(new Fruit());调用了新增的toString方法。那么其父类中的toString方法的代码就没有了吗?如果同时想要复用其父类的toString方法,要怎么操作?(使用代码演示)
代码如下,如果想要复用父类中的toString,可以用super实现
public class Fruit {
String name;
@Override
public String toString() {
return "Fruit [name=" + name + "]" + super.toString();
}
public static void main(String[] args) {
System.out.println(new Fruit());
}
}
输出结果:Fruit [name=null]Fruit@15db9742
4.3 Fruit类还继承了Object类的eqauls方法。尝试分析其功能?自己编写一个equals方法覆盖父类的相应方法,功能为当两个Fruit对象name相同时(忽略大小写),那么返回true。(使用代码证明你自己覆盖的eqauls方法是正确的)
Object类的eqauls方法:比较两个对象是否相等 代码如下
class Fruit{
private String 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 C{
public static void main(String[] args){
Fruit fruit1 = new Fruit();
fruit1.setName("orange");
Fruit fruit2 = new Fruit();
fruit2.setName("orange");
System.out.println(fruit1.equals(fruit2));
}
}
输出结果

4.4 在4.3的基础上使用ArrayList fruitList存储多个fruit,要求如果fruitList中已有的fruit就不再添加,没有的就添加进去。请编写相关测试代码。并分析ArrayList的contatins方法是如何实现其功能的?
将ArrayList中的元素一个一个的与待比较的字符串用equals方法进行比较 代码如下
public class ArrayListfruit {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
String fruit[] ={"apple","pear","apple","orange"} ;
for (int i = 0;i<4;i++) {
String o = fruit[i];
if (list.contains(o)) {
System.out.println("contain");
} else {
list.add(o);
}
}
System.out.println(list);
}
}
运行结果

5.代码阅读:PersonTest.java(abstract、多态)
5.1 画出类的继承关系

5.2 读懂main函数,将自己推测的出代码运行结果与真正运行结果进行比较。尝试分析原因
运行结果
Manager [bonus=12000.3, toString()=Employee [salary=90000.1, toString()=Person [name=Clark, adress=GE, phonenumber=111, email=111@mail.com, age=10, gender=mail]]]
Student [status=1, toString()=Person [name=wang, adress=110, phonenumber=15959, email=15959@163.com, age=18, gender=male]]
Employee [salary=1000.0, toString()=Person [name=zhang, adress=136, phonenumber=1360, email=1360@mail.com, age=21, gender=female]]
Programmer [allowance=50000.0, toString()=Employee [salary=100000.0, toString()=Person [name=Gates, adress=usa, phonenumber=911, email=911@com, age=59, gender=male]]]
因为Person是一个抽象类,包含子类的共同属性和方法,但是具体的方法要看子类的执行,在main函数里已经实例化成Person的子类对象,或继承的分支对象
5.3 子类中里面使用了super构造函数,作用是什么?如果将子类中的super构造函数去掉,行不行?
子类中里面使用了super构造函数,作用是为了调用父类的构造函数。不能将子类中的super构造函数去掉,否则子类会自动调用父类的无参构造函数,然而父类中没有无参构造函数,这显然是错误的。
5.4 PersonTest.java中的代码哪里体现了多态?你觉得多态有什么好处?多态和继承有什么关系吗?
子类继承父类体现了多态。 多态的好处:增强程序的可扩展性及可维护性,使代码更加简洁。 多态和继承的关系:多态是使用单一接口操作多种类型的对象。多态与继承、方法重写密切相关,继承服务于多态,多态也不能单独使用,即多态与继承相互作用。
3.码云代码提交记录
在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图

4. PTA实验
题目集:jmu-Java-03-面向对象1-基础-封装继承 中的
函数(4-1, 4-2, 4-3,4-4较难选做)
编程(5-4, 5-5, 5-6)
1.用super关键字调用父类的toString方法,再加上company.toString()进行复写toString。 2.要用到super()去调用父类中构造的函数,不然子类是无法去继承父类中构造的函数的。 3.了解Java.lang.Object的用法。 4.编写equals覆盖函数的时候要考虑一下Null的情况
201521123048 《Java程序设计》第4周学习总结的更多相关文章
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 20145213《Java程序设计》第二周学习总结
20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...
- 20145213《Java程序设计》第一周学习总结
20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 20145330孙文馨 《Java程序设计》第一周学习总结
20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...
- 20145337 《Java程序设计》第九周学习总结
20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...
- 20145337 《Java程序设计》第二周学习总结
20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...
- 20145218《Java程序设计》第一周学习总结
20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...
- 《Java程序设计》第九周学习总结
20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...
- 《Java程序设计》第二周学习总结
20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...
随机推荐
- 浅尝Java(二、代码折叠插件的使用)
主题:eclipse代码折叠插件的使用. 工作中在使用eclipse开发Java项目时,我们会写很多if,for循环啊什么的,这使得我们的项目代码会有很多很多行.写完后要想检查或者查看,就要从头一行一 ...
- 优秀开源软件学习系列(一)——从零学习Spring4以及学习方法分享
一.目的1.掌握Spring4怎样使用,以便将这个框架作为自己的一项技能.2.掌握Spring官网是怎样介绍其产品的,在心中对Spring有最官方的.最直观的了解.在Spring的相关领域,能够知道怎 ...
- 你不可错过的二维码生成与解析-java后台与前端js都有
1.二维码分类 二维条码也有许多不同的码制,就码制的编码原理而言,通常分为三种类型. 线性堆叠式二维码 编码原理: 建立在一维条码基础之上,按需要堆积成两行或多行. 图示: 矩阵式二维码 最常用编 ...
- ELK5.0搭建部署
###关闭防火墙 service iptables stop ###定义vi=vim alias vi=vim vi ~/.bashrc alias vi='vim' yum -y install l ...
- decimal扩展方法(转换为字符串,去掉末尾的0)
/// <summary> /// 转换为字符串,去掉末尾0 /// </summary> /// <param name="target">被 ...
- 【Spring】web开发 javaConfig方式 图解
spring3.2之后开始支持java配置方式开发web项目,不使用web.xml,但需要在servlet3.0环境,一般tomcat7会支持,6不行 下图中:MyAppInitializer和Spr ...
- PyQt4简单小demo
#coding=utf-8 import sys from PyQt4.QtCore import * from PyQt4.QtGui import * class FontPropertiesDl ...
- scikit_learn入门
原文:http://www.cnblogs.com/taceywong/p/4568806.html 原文地址:http://scikit-learn.org/stable/tutorial/basi ...
- poj2901 Hotel
Hotel Time Limit: 10000MS Memory Limit: 65536K Total Submissions: 859 Accepted: 280 Description ...
- 迈向angularjs2系列(3):组件详解
一: 以组件开发一个to-do list应用 todo组件分为导入.接口定义.顶层组件.控制器.启动5个部分. app.ts: //导入 import {Component} from '@angul ...