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

1.2 使用常规方法总结其他上课内容
- 关于多态,多态性就是相同的形态,不同的定义。在简单点说的话就是不同类的对象对同一个消息作出的相应,举个栗子来说,比如说在操作电脑的时候,在PPT下按F1就是帮助与问答,在Eclipse下就会弹出控制台的帮助文档,同一个事件发生在不同的对象上面会产生不同的结果。多态的实现是仰仗于动态绑定,通过判断对象的实际类型,调用相应的方法。
- 关于instanceof运算符,可以判断父类所引用的对象的实际类型,如果
xxx instanceof xxxx则会返回true,这个在后面进行强制转换时是很有用的。 - 类型的转换不可以随意进行,是不安全的,只能在继承层次内进行类型转换,安全的强制转换类型方法是通过
instanceof进行转换。
2. 书面作业
1.注释的应用
使用类的注释与方法的注释为前面编写的类与方法进行注释,并在Eclipse中查看。(截图)
首先是类的注释:

然后是方法的注释:

2.面向对象设计(大作业1,非常重要)
2.1将在网上商城购物或者在班级博客进行学习这一过程,描述成一个故事。(不得少于50字,参考QQ群中PPT的范例)
答:首先,要装成想要买书的样子,所以我上了亚马逊,输入了亚马逊的域名:

之后就要输入你的亚马逊账号和密码了(之前已经登录过了就不在退出和登陆了我怕忘记密码hhh)

然后这边当然是要假装一下要买java的书了!在搜索栏中输入java,在搜索栏中会跳出许多java类的指导书供选择

然后选择一本正在满减的书 java编程思想第四版! 在上面会贴有作者、价格等等本书的消息,下面还有选项可以加入购物车或者加入心愿单

这时候,我假装很喜欢这本书就把它加入了购物车,并且选择了货到付款

然后我十分肯定及确定想要这本书了,就要结账的时候,发现没钱,就把该书从购物车删除了,剧情结束

2.2通过这个故事我们能发现谁在用这个系统,系统中包含的类及其属性方法,类与类之间的关系。尝试找到这些类与属性,并使用思维导图描述类、属性、方法及类与类之间的关系
答:
2.3 尝试使用Java代码实现故事中描述的这一过程(不必很完善),将来要在这个基础上逐渐完善、扩展成一个完整的面向对象的系统。(可选:加分)
答:进入Amazon网站之后,在网页中有可以查看商品、查看购物车、查看心愿单等方法类:
public class Amazon{
public void UserLogin(User); //登录用户类
public void ShowShoppingCart(Cart); //购物车类
public void ShowWishes(Wishes); //心愿单类
}
登录类中:
public class UserLogin(){
private Sring UserName; //用户名
private String PassWord; //密码
}
购物车中:
public class ShowShoppingCart(){
public void add(){
/*
*实现购买商品的增加
*/
}
public void delete(){
/*
*实现购买商品的删除
*/
}
public void purchase(){
/*
*实现购买商品的购买
*/
}
(心愿单类与购物车类类似 不完善的不完善的... ... )
3.ManagerTest.zip代码分析 分析ManagerTest.zip中的代码,回答几个问题:
3.1 在本例中哪里体现了使用继承实现代码复用?回答时要具体到哪个方法、哪个属性
class Manager extends Employee
{
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;
}
在Manager类中,getSalary()前面使用了super,直接复用了父类的代码,构造函数Manager与Employee共同具有的属性是name,salary,hireday。
3.2Employee类及其子类Manager都有getSalary方法,那怎么区分这两个方法呢?
- 在部分的同名方法中,可以通过区分参数列表的方式来区分两个方法
- 一般区分父类和子类的两个方法,主要是通过判断方法前面是否有super来判断,父类的关键字是super。
3.3文件第26行e.getSalary(),到底是调用Manager类的getSalary方法还是Employee类的getSalary方法。
文件中第26行前后代码为:
for (Employee e : staff)
System.out.println("name=" + e.getName() + ",salary=" + e.getSalary());
通过代码中可以看出staff被创建为Employee类,所以26行的e.getSalary()是调用Employee类的方法。
3.4Manager类的构造函数使用super调用父类的构造函数实现了代码复用,你觉得这样的有什么好处?为什么不把父类构造函数中的相关代码复制粘贴到Manager的构造函数中,这样看起来不是更直观吗?
答:我认为使用super调用父类函数可以用简单的一行继承相同的函数,可以大大减少代码的数量,提供写代码时候的效率。如果直接将父类构造函数中的相关代码复制粘贴到Manager中,看起来是比较直观,但是重复读取一串代码降低了代码的可读性,会使代码变得冗长,显得很low。
4.Object类
4.1 编写一个Fruit类及属性String name,如没有extends自任何类。使用System.out.println(new Fruit());是调用Fruit的什么方法呢?该方法的代码是从哪来的?尝试分析这些代码实现了什么功能?
public class HTL {
public static void main(String[] args) {
System.out.println(new Fruit());
}
}
class Fruit{
private String name;
}
运行结果为:Homework.Fruit@139a55
由于该类没有继承任何父类,所以系统自动默认继承Object类。当直接输出某个对象的时候,会调用toString()的方法。
4.2 如果为Fruit类添加了toString()方法,那么使用System.out.println(new Fruit());调用了新增的toString方法。那么其父类中的toString方法的代码就没有了吗?如果同时想要复用其父类的toString方法,要怎么操作?(使用代码演示)
public class HTL {
public static void main(String[] args) {
System.out.println(new Fruit());
}
}
class Fruit{
private String name;
public String toString(){
return "hhhhhh";
//return super.toString(); 如果复用父类的话则加super
}
4.3 Fruit类还继承了Object类的equals方法。尝试分析其功能?自己编写一个equals方法覆盖父类的相应方法,功能为当两个Fruit对象name相同时(忽略大小写),那么返回true。(使用代码证明你自己覆盖的equals方法是正确的)
public class HTL {
public static void main(String[] args) {
System.out.println(new Fruit());
}
}
class Fruit{
private String name;
public boolean equals(Object obj) {
return (this == obj);
}
}
5.代码阅读:PersonTest.java(abstract、多态)
5.1画出类的继承关系

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

因为Student、Employee、Manager和Programmer这四个类会使用toString()的方法输出成员变量,而Person类是一个抽象类,无法实例化对象,猜测与运行结果一致。
5.3 子类中里面使用了super构造函数,作用是什么?如果将子类中的super构造函数去掉,行不行?
作用:调用父类的构造器
不可以将子类中的super构造函数去掉,去掉后编译器会调用父类无参构造器,然而在代码中父类没有无参构造器,所以会出现编译的错误。
5.4 PersonTest.java中的代码哪里体现了多态?你觉得多态有什么好处?多态和继承有什么关系吗?
体现多态的代码:
for (Person person : peoples) {
System.out.println(person);
}
多态的好处:
1.可替换性(substitutability)。多态对已存在代码具有可替换性。例如,多态对圆Circle类工作,对其他任何圆形几何体,如圆环,也同样工作。
2.可扩充性(extensibility)。多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能。例如,在实现了圆锥、半圆锥以及半球体的多态基础上,很容易增添球体类的多态 性。
3.接口性(interface-ability)。多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。
4.灵活性(flexibility)。它在应用中体现了灵活多样的操作,提高了使用效率。
5.简化性(simplicity)。多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要
参考链接:https://zhidao.baidu.com/question/522525718170303205.html
关系:
继承:子类继承父类中所以的属性和方法,但是对于private的属相和方法,由于这个是父类的隐私,所以子类虽然是继承了,但是没有可以访问这些属性和方法的引用,所以相当于没有继承到。
多态:就是父类引用可以持有子类对象。这时候只能调用父类中的方法,而子类中特有方法是无法访问的,因为这个时候(编译时)你把他看作父类对象的原因,但是到了运行的时候,编译器就会发现这个父类引用中原来是一个子类的对像,所以如果父类和子类中 有相同的方法时,调用的会是子类中的方法,而不是父类的。
在Java中也可以这么说:编译时看父类,运行时看子类。
参考链接https://zhidao.baidu.com/question/338728339.html?fr=iks&word=java%D6%D0%B6%E0%CC%AC%BA%CD%BC%CC%B3%D0%B5%C4%B9%D8%CF%B5&ie=gbk
本题后两个问来自于网络上面的答案,自己确实想不到网上那么完善,所以就复制上答案,谅解谅解......
3. 码云代码提交记录

4. PTA实验
- 4-1 使用super调用父类方法即可
- 4-2 根据题目的要求,依次创建Computer、Double、Integer、String类,然后倒序输出
- 5-4 通过定义一个父类Shape,让子类Rectangle与Circle分别继承父类
201521123112《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 ...
随机推荐
- 【NO.3-1】Jmeter - 在Windows配置HOSTS的方法
在Windows配置HOSTS 那么还记得Windows如何修改HOSTS文件吗? (1) 进入到C:\Windows\System32\drivers\etc (2) 通过”记事本”来打开hosts ...
- Maven干货
好处: 1. 依赖管理:对jar包统一管理 2. 项目构建: 项目编码完成后,对项目进行编译.测试.打包.部署.之前项目构建通过eclipse工具实现.今天学习新的工具也可以实现这些过程.比如:通过m ...
- DB2 HADR备库归档问题
--DB2 HADR备库归档问题 --------------------------------2013/10/29 我们注意到在Oracle DataGuard中,备机中依然会设置LOG_ARCH ...
- php面试题汇总一(基础篇附答案)
一份不错的php面试题,附答案,有准备换工作的同学可以参考一下. 1:使用五种以上方式获取一个文件的扩展名要求:dir/upload.image.jpg,找出 .jpg 或者 jpg ,必须使用PHP ...
- C#使用Xamarin开发可移植移动应用(5.进阶篇显示弹出窗口与通讯中心)附源码
前言 系列目录 C#使用Xamarin开发可移植移动应用目录 源码地址:https://github.com/l2999019/DemoApp 可以Star一下,随意 - - 说点什么.. 没啥好说的 ...
- 自定义DialogAlert消息框
效果: 一.新建类CommomDialog 继承Dialog public class CommomDialog extends Dialog implements View.OnClickListe ...
- 聊聊GIS中那些坐标系
从第一次上地图学的课开始,对GIS最基本的地图坐标系统就很迷.也难怪,我那时候并不是GIS专业的学生,仅仅是一门开卷考试的专业选修课,就没怎么在意. 等我真正接触到了各种空间数据产品,我才知道万里长征 ...
- “最美天气”版本II
抓取实时天气前需要首先获得所有地区的cityCode,因为在最后queryWeather的时候需要传递这个参数. 最美天气获取全部cityCode及cityName的方法: 1.获取34个省及直辖市的 ...
- js 在遍历时只会显示最后一个遍历到的结果
在做项目时遇到了一个关于遍历的问题, 前提是:在ul中有n个li每个li从后台获取的数据中有一个sign的字段,当sign等于0时(li未被点击过)li会显示一个红点,当sign不等于0时(li已被点 ...
- mysql语句的一个问题
刚才在群里有个同学提出了这么一个问题 在Mybatis的mapper文件中有一条语句这么写 说是系统不报错,也没返回,我一看句子应该没什么问题.执行的时候应该是PreparedStatement 执行 ...