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 ...
随机推荐
- Luogu P3367 【模板】并查集
题目描述 如题,现在有一个并查集,你需要完成合并和查询操作. 输入输出格式 输入格式: 第一行包含两个整数N.M,表示共有N个元素和M个操作. 接下来M行,每行包含三个整数Zi.Xi.Yi 当Zi=1 ...
- 王佩丰第一讲 认识excel笔记
改变工作表表浅颜色 批量插入工作表 选择多张工作表然后插入 找到表格边界区域快捷键(找到表格的最后一行):快速到达最上下左右端 点击边框上下左右双击 从指定的位置开始冻结窗格 输入今天的日期 快捷键c ...
- C#多线程的用法4-线程间的协作lock快捷方式
线程间协作还可通过lock(加锁)方式进行,lock属于C#的Monitor语法糖(Monitor后续讲解).使用简单快捷,如下: /// <summary> /// 多线程协作-lock ...
- 一步步学习操作系统(1)——参照ucos,在STM32上实现一个简单的多任务(“啰里啰嗦版”)
该篇为“啰里啰嗦版”,另有相应的“精简版”供参考 “不到长城非好汉:不做OS,枉为程序员” OS之于程序员,如同梵蒂冈之于天主教徒,那永远都是块神圣的领土.若今生不能亲历之,实乃憾事! 但是,圣域不是 ...
- js prototype属性,类似.net扩展方法
prototype 属性使您有能力向对象添加属性和方法. 类似.net扩展方法 定义: String.prototype.toWeekName = function () { var newDate ...
- Json安全
1.不要使用顶级JSON数组,避免被<script>标签引用. 2.使用POST+密钥获取JSON,尽量不要用GET方式. 3.不要使用eval()将对象放入内存,eval()会执行所传入 ...
- VMware Workstation 12 Pro 之安装林耐斯优麒麟 X64-UI系统
VMware Workstation 12 Pro 之安装林耐斯优麒麟 X64-UI系统... ------------------------------- -------------------- ...
- 8.8.2 Final关键字
final表示不可改变的含义 1.采用final 修饰的类不能被继承 2.采用final 修饰的方法不能被覆盖 3.采用final 修饰的变量不能被修改 4.final修饰的变量必须显示初始化(该 ...
- Android SharedPreferences基本用法
使用SharedPreferences SharedPreferences是Android平台上一个轻量级的存储类, 用来保存应用的一些常用配置. SharedPreferences与Editor简介 ...
- WP开发图片保存到独立存储并从独立存储中读取
需要添加引用命名空间 using System.IO; using System.IO.IsolatedStorage; 1.将图片保存到独立存储空间 using (IsolatedStorageFi ...