1. 本章学习总结
- 学会了如何去设计一个类,尽量用private修饰属性,public修饰方法。
- 了解继承的目的。
- 了解继承和多态的关系。
- 了解关键字extends super final override
2. 书面作业
Q1. 注释的应用
使用类的注释与方法的注释为前面编写的类与方法进行注释,并在Eclipse中查看。(截图)
答:
注释的插入:
注释以/开始,以/结束
类注释
/**
*.......你要注释的内容
*/
Q2.面向对象设计(大作业1,非常重要)
2.1 将在网上商城购物或者在班级博客进行学习这一过程,描述成一个故事。(不得少于50字,参考QQ群中PPT的范例)
2.2 通过这个故事我们能发现谁在用这个系统,系统中包含的类及其属性方法,类与类之间的关系。尝试找到这些类与属性,并使用思维导图描述类、属性、方法及类与类之间的关系。
2.1答:小明平常喜欢购物,就经常在淘宝网上购物,他一般都在淘宝网首页挑选商品,买的大都是书籍,他看的一本书很是喜欢,就点进去查看书本详细信息,觉得还满意就先加入了购物车,后来又选了几本书,最后点击到购物车界面准备查看买了多少东西和多少钱,发现有点贵,就把一本书删除了。最后在网上用支付宝付完款。
2.2答:小明在用这个购物系统,包含的类有商品,书籍类商品,其他商品,商品列表,购物车,支付宝。
商品(Goods):属性有编号(id),名字(name),价格(price);
书籍类商品(Books):继承商品类所有属性,特有属性有作者(author);(其他商品(Others)类似);
商品列表(GoodsList):属性有商品(Goods),购物车(ShoppingCar),方法有搜索(search),筛选(select);
购物车(ShoppingCar):属性有商品(Goods),总价(sumPrice),数目(nummber),方法有添加(add),删除(delete);
支付界面(PayWay);属性有总价(sumPrice),方法有支付(pay);
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的构造函数中,这样看起来不是更直观吗?
3.1
答:在子类中实现了代码复用
public Manager(String n, double s, int year, int month, int day)
{
super(n, s, year, month, day);
bonus = 0;
}
public double getSalary()
{
double baseSalary = super.getSalary();
return baseSalary + bonus;
}
复用的方法是父类中的
//父类构造函数
public Employee(String n, double s, int year, int month, int day)
{
name = n;
salary = s;
GregorianCalendar calendar = new GregorianCalendar(year, month - 1, day);
hireDay = calendar.getTime();
}
public double getSalary()
{
return salary;
复用的属性有
private String name;
private double salary;
private Date hireDay;
3.2答:关键看e的类型,但使用super关键字就运用父类方法
3.3答:调用的是Employee类的getSalary方法
3.4答:使用super调用父类的构造函数就是为了要节省时间和资源,简化了代码,如果直接把之前的代码复制过来,虽然看起来很直观,但是显得代码十分冗余。
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方法是如何实现其功能的?
4.1.编写的代码如下
`class Fruit {
private String name;
}
public class Main {
public static void main(String[] args) {
System.out.println(new Fruit());
}
}
运行结果为:Fruit@2a139a55,调运了Fruit的toString方法呢,该方法的代码是从object类来,因为object是所有类的父类。功能就是输出“类名加上16进制的哈希码”形式字符串。
4.2.在Fruit类添加了toString()方法后的代码
class Fruit {
private String name;
public String toString() {
return "Fruit [name=" + name + "]";
//return "Fruit [name=" + name + "]\n"+super.toString();
}
}
public class Main {
public static void main(String[] args) {
System.out.println(new Fruit().toString());
}
}
调用了新增的toString方法,那么其父类中的toString方法的代码还在,如果同时想要复用其父类的toString方法,可运用super关键字,如上述代码中被注释部分,最后输出结果为:
4.3
答:Object类中的equals()方法是比较引用的,即引用相同就返回true,不同返回false。
Eclipse中自动生成的eqauls方法如下
输出结果为:
4.4
输出结果为:
ArrayList的contatins方法实现分析:根据HashCode()地址计算的值作比较,如果相同则不用添加,否则添加。
Q5.代码阅读:PersonTest.java(abstract、多态)
5.1 画出类的继承关系
5.2 读懂main函数,将自己推测的出代码运行结果与真正运行结果进行比较。尝试分析原因
5.3 子类中里面使用了super构造函数,作用是什么?如果将子类中的super构造函数去掉,行不行?
5.4 PersonTest.java中的代码哪里体现了多态?你觉得多态有什么好处?多态和继承有什么关系吗?
5.1
5.2
运行结果为:
5.3答:作用是调用父类的属性,方法,构造函数。 不可以,因为如果将super去掉,那么编译器会自动加入对父类无参构造函数的调用,然而这个例子中没有一个类是有无参构造函数的,会编译出错。
5.4
for (Person person : peoples) {
System.out.println(person);//多态的体现
}
多态的好处:
1.可替换性(substitutability)。多态对已存在代码具有可替换性。例如,多态对圆Circle类工作,对其他任何圆形几何体,如圆环,也同样工作。
2.可扩充性(extensibility)。多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能。例如,在实现了圆锥、半圆锥以及半球体的多态基础上,很容易增添球体类的多态性。
3.接口性(interface-ability)。多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。如图8.3 所示。图中超类Shape规定了两个实现多态的接口方法,computeArea()以及computeVolume()。子类,如Circle和Sphere为了实现多态,完善或者覆盖这两个接口方法。
4.灵活性(flexibility)。它在应用中体现了灵活多样的操作,提高了使用效率。
5.简化性(simplicity)。多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。
多态与继承的关系:
继承,子类继承父类中所以的属性和方法,但是对于private的属相和方法,由于这个是父类的隐私,所以子类虽然是继承了,但是没有可以访问这些属性和方法的引用,所以相当于没有继承到。很多时候,可以理解为,没有继承。
多态:就是父类引用可以持有子类对象。这时候只能调用父类中的方法,而子类中特有方法是无法访问的,因为这个时候(编译时)你把他看作父类对象的原因,但是到了运行的时候,编译器就会发现这个父类引用中原来是一个子类的对像,所以如果父类和子类中有相同的方法时,调用的会是子类中的方法,而不是父类的。
在Java中也可以这么说:编译时看父类,运行时看子类。
[参考链接](http://www.cnblogs.com/jack204/archive/2012/10/29/2745150.html)
3. PTA实验总结及码云上代码提交记录
3.1本周Commit历史截图
在码云的项目中,依次选择“统计-Commits历史-设置时间段”,然后搜索并截图,如下图所示
3.2 实验总结
4.1.运用了super关键字,可少些代码,节省了时间与空间。注意super调用方法;
4.2.开始没理解题目意思,一直通不过,后来问了下同学,原来是用父类开数组,然后每个元素用子类去实例化,最后输出;
4.3.注意company为null的情况,其他按提示做就还蛮简单;
5.4.应用了抽象类和继承,按照提示做就没问题。
5.5.可以通过Eclipse中自动生成的代码完成大半。
其余还在思考。
201521145048《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 ...
随机推荐
-
[LeetCode] Jump Game II 跳跃游戏之二
Given an array of non-negative integers, you are initially positioned at the first index of the arra ...
-
web前端之html5开发中常用的开发工具
正所谓“工欲善其事,必先利其器”,对Web开发人员来说,好工具的使用总会给人带来事半功倍的效果.正准备学习HTML5或者已经进行了一段时间的HTML5开发的童鞋,都有必要了解下,HTML5都有哪些开发 ...
-
CodeLite的姿势
在Mac上安装cscope 1.下载cscope的Zip压缩包 2.解压 3.打开终端,进入解压目录,运行 ./configure make make install 4.在CodeLite中,在Pl ...
-
this call和apply
this指针总是指向一个对象,大致可以分为以下四种: 1,作为对象的方法调用(this指向该对象) 2,作为普通函数调用 当函数不作为对象的属性被调用时,也就是普通函数方式,此时的this总是指向全局 ...
-
【codeforce 219D】 Choosing Capital for Treeland (树形DP)
Choosing Capital for Treeland Description The country Treeland consists of n cities, some pairs of t ...
-
触摸点为scrollview上的子控件时,scrollview不能滚动(iOS8)
现象:在iOS8上,scrollview上面布局了多行多列的button,滑动scrollview,如果当触摸点是在按钮上,scrollview不能滚动. 例如: 解决方法:设置scrollview的 ...
-
Codeforces Round #383 Div 1题解
第一次打Div 1,感觉还是挺难的..把基础题打完就日常划水了.... [A. Arpa's loud Owf and Mehrdad's evil plan](http://codeforces.c ...
-
PS如何批量生成缩略图(方法可以通用其他重复劳动)
原图 缩略 进入正题,学生时代玩过脚本精灵的应该一点就通 原理就是:录制一系列动作,然后生成脚本,并执行(经常PS水印代码的一个可以用程序实现,一个就可以用PS脚本) 新建一个组 新建一个动作 进行你 ...
-
c++ a+b
#include<iostream> using namespace std; int main() { int a,b,sum; cin>>a>>b; sum=a ...
-
解决Eclipse中DDMS一直打印输出Connection attempts的问题
Eclipse/MyEclipse出现以下错误的解决方案: [2015-01-25 16:10:29 - DeviceMonitor] Adb connection Error:远程主机强迫关闭了一个 ...