201521123042 《Java程序设计》第4周学习总结
1. 本周学习总结
1.1 尝试使用思维导图总结有关继承的知识点。
1.2 使用常规方法总结其他上课内容。
多态性的应用:
instanceof运算符: 通过 instanceof判断父类引用所引用的对象实例的实际类型;将父类强制转换成子类之前,应使用instanceof进行检查或说判断。
动态绑定:运行时能够自动地选择调用哪个方法。
2. 书面作业
Q1.注释的应用
使用类的注释与方法的注释为前面编写的类与方法进行注释,并在Eclipse中查看。(截图)
类注释方法:
/**
.......注释的内容
/
方法注释:
Q2.面向对象设计(大作业1,非常重要)
2.1 将在网上商城购物或者在班级博客进行学习这一过程,描述成一个故事。
在京东购买耳机。打开京东购物网站,在搜索栏中输入关键字“耳机”。进一步进行精确筛选例如品牌、佩戴方式、功能用途等。确定搜索范围之后可选择按照综合、销量、评论、新品和价格这几种方式排序查看商品。找到满意的商品,点击查看详细信息,想要购买就点击“加入购物车”,最后在我的购物车中进行商品结算。
2.2 通过这个故事我们能发现谁在用这个系统,系统中包含的类及其属性方法,类与类之间的关系。尝试找到这些类与属性,并使用思维导图描述类、属性、方法及类与类之间的关系。
2.3 尝试使用Java代码实现故事中描述的这一过程(不必很完善),将来要在这个基础上逐渐完善、扩展成一个完整的面向对象的系统。(可选:加分)
参考资料:
UML类图
面向对象案例-借款者姓名地址.zipQ3.ManagerTest.zip代码分析
分析ManagerTest.zip中的代码,回答几个问题:
3.1 在本例中哪里体现了使用继承实现代码复用?回答时要具体到哪个方法、哪个属性。
public Employee(String n, double s, int year, int month, int day)//父类Employee的函数
{
name = n;
salary = s;
GregorianCalendar calendar = new GregorianCalendar(year, month - 1, day);
hireDay = calendar.getTime();
} public double getSalary()//父类Employee的函数
{
return salary;
} public Manager(String n, double s, int year, int month, int day)//子类Manager中的函数
{
super(n, s, year, month, day);
bonus = 0;
} public double getSalary()//子类Manager中的函数
{
double baseSalary = super.getSalary();
return baseSalary + bonus;
}
可见Manager类中,
super(n, s, year, month, day)
是利用关键字super来调用父类的构造函数对自身进行初始化,复用了name、salary、year、month、day这五个属性;double baseSalary = super.getSalary()
也是调用父类方法。3.2 Employee类及其子类Manager都有getSalary方法,那怎么区分这两个方法呢?
答:如果有重写父类的方法,调用方法是子类的,如果调用父类的需要使用关键字super.方法。
3.3 文件第26行e.getSalary(),到底是调用Manager类的getSalary方法还是Employee类的getSalary方法。
答:Employee类的方法
3.4 Manager类的构造函数使用super调用父类的构造函数实现了代码复用,你觉得这样的有什么好处?为什么不把父类构造函数中的相关代码复制粘贴到Manager的构造函数中,这样看起来不是更直观吗?
答:子类调用父类的构造方法,可减少代码量,也更简洁。
Q4.Object类
4.1 编写一个Fruit类及属性String name,如没有extends自任何类。使用System.out.println(new Fruit());是调用Fruit的什么方法呢?该方法的代码是从哪来的?尝试分析这些代码实现了什么功能?
import java.util.*;
class Fruit{
private String name;
}
public class Main {
public static void main(String[] args) {
System.out.println(new Fruit());
}
}
结果:Fruit@15db9742。
java中,每个类都是Object的子类,而Object有个toString方法。
在你的代码中,你直接打印了一个类,他会调用这个类的toString方法,如果你不覆盖这个方法,它就调用Object的toString方法,结果默认是这个类的类型加上内存的地址。4.2 如果为Fruit类添加了toString()方法,那么使用System.out.println(new Fruit());调用了新增的toString方法。那么其父类中的toString方法的代码就没有了吗?如果同时想要复用其父类的toString方法,要怎么操作?(使用代码演示)
父类toString方法仍然存在,如果想要复用其父类的toString方法,用super.调用方法即可。代码如下:
import java.util.*;
class Fruit{
private String name;
public String toString() {
return "name "+super.toString();
}
}
public class Main {
public static void main(String[] args) {
System.out.println(new Fruit());
}
}
输出结果为:name Fruit@15db9742
4.3 Fruit类还继承了Object类的equals方法。尝试分析其功能?自己编写一个equals方法覆盖父类的相应方法,功能为当两个Fruit对象name相同时(忽略大小写),那么返回true。(使用代码证明你自己覆盖的eqauls方法是正确的)
Object的equal类比较两个变量在内存中的指针指向是否相同,即比较两者是否为“同一个”。
class Fruit{
private String name;
Fruit(String name){
this.name=name;
} @Override
public String toString() {
return "name "+super.toString();
} @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 Main {
public static void main(String[] args) { Fruit fruit1=new Fruit("apple");
Fruit fruit2=new Fruit("apple");
Fruit fruit3=new Fruit("watermelon");
System.out.println(fruit1.equals(fruit2));
System.out.println(fruit1.equals(fruit3));
}
}
运行结果为:
true
false
4.4 在4.3的基础上使用ArrayList fruitList存储多个fruit,要求如果fruitList中已有的fruit就不再添加,没有的就添加进去。请编写相关测试代码。并分析ArrayList的contatins方法是如何实现其功能的?
Q5.代码阅读:PersonTest.java(abstract、多态)
参考文件:PersonTest.java
5.1 画出类的继承关系
5.2 读懂main函数,将自己推测的出代码运行结果与真正运行结果进行比较。尝试分析原因
运行结果如图:
Person类被abstract修饰,是一个抽象类,抽象类不能被直接实例化,只能作为其它类的父类。剩下的四个类中,Employee和Student类继承Person类的输出格式是输出自己特有的属性,然后调用父类的toString()方法;Manager和Programmer继承Employee类,所以它们的输出格式有两次嵌套
5.3 子类中里面使用了super构造函数,作用是什么?如果将子类中的super构造函数去掉,行不行?
(1)子类中里面使用了super构造函数,作用是调用父类的构造方法.
(2)如果将子类中的super构造函数去掉,则编译时会调用父类无参构函数。编译出错。
5.4 PersonTest.java中的代码哪里体现了多态?你觉得多态有什么好处?多态和继承有什么关系吗?
(1)首先每个类中都用了toString()方法,但输出结果都不相同;其次子类类型的引用变量即可以引用本类对象,也可引用父类对象。 (2)
把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。 赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。
(3)多态与继承、重载并不是孤立的,他们之间存在着紧密的联系,多态是建立继承、重载这两者的基础之上。多态应用的三个条件:继承、子类对象指向父类引用、重写。
3. 码云代码提交记录
4. PTA实验
题目集:jmu-Java-03-面向对象1-基础-封装继承 中的
函数(4-1, 4-2, 4-3,4-4较难选做)
编程(5-4, 5-5, 5-6)
一定要有实验总结
本次的收获:
4-1:用super关键字调用父类方法。
4-3:运用DecimalFormat方法保留小数、重写equal方法。
5-4:用abstract修饰类,通过继承的关系来实现代码的复用。
5-5:重写equals判断对象是否在数组中存在。
201521123042 《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 ...
随机推荐
- android学习SeekBar的使用
SeekBar介绍听歌的时候,我们常常想快进或者快退到某一时间段,听歌的时候我们控制音量大小听歌,SeekBar可以通过滑块的位置来标示数值,而且拖动条允许用户拖动滑块来改变进度条的大小 SeekBa ...
- Python 数据模型
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 25.0px Helvetica } 一摞Python风格的纸牌 from collections impo ...
- 利用Arduino快速制作Teensy BadUSB, 攻击计算机
BadUsb介绍 BadUSB是计算机安全领域的热门话题之一,该漏洞由Karsten Nohl和Jakob Lell共同发现,并在2014年的BlackHat安全大会上公布. 虽然已隔一两年,但还是有 ...
- SQL语句:Group By总结
1. Group By 语句简介: Group By语句从英文的字面意义上理解就是"根据(by)一定的规则进行分组(Group)".它的作用是通过一定的规则将一个数据集划分成若干个 ...
- 7.20.01 java格式化输出 printf 例子
java格式化输出 printf 例子 importjava.util.Date; publicclassPrintf { publicstaticvoidmain(String[] args) { ...
- 装饰模式(decorator)
意图: 动态地给一个对象添加一些额外的职责,就增加功能而言,Decorator模式相比生成子类模式更为灵活 动机: 有时我们希望给某个对象而不是整个类添加一些功能.例如,一个图形用户界面工具箱允许你对 ...
- Java温故而知新-空心菱形
空心菱形 今天做题练手,题目是空心菱形,一开始没什么思路,去网上找了找,发现很难找到讲的通透的,自己现在独立做出来了,记录一下,以备后用. * * * * * * * * * * * * * * * ...
- Linux常用命令简单总结
Liunx常用命令 1. 文件及目录管理 1.1. ls:显示目录 参数及说明 空:补显示隐含文件 -a:显示所有文件 -l:显示详细列表 1.2. chgrp:设置文件组(root权限) 用法示例 ...
- HTML (Hyper Text Markup Language) 常用标签
HTML是什么? 英文全称:Hyper Text Markup Language 中文全称:超文本标记语言 网页主要由 机构 表现 行为 组成 什么是标签? < > 里的叫 ...
- 关于C#开发 windows服务进程
最近在做一个物联网项目,其中有一个模块是需要实现热水工程的自动化补水和回水功能 实现的方式有多种,我选用了VS C#的Windows服务方式. 首先是创建一个windows服务项目(名称随你喜欢的规范 ...