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 ...
随机推荐
- python学习之元组与文件
元组 元组是最后一个python集合类型.元组由简单的对象构成,元组与列表非常相似,只不过元组不能在原处修改,并且通常写成圆括号,虽然元组部支持任何方法调用,但元组具有列表的大多数属性. 实际应用中的 ...
- 社群系统ThinkSNS V4.5.29 APP更新发布,新增用户认证及系统消息
社群系统ThinkSNS V4版本移动端APP将于7月29日更新发布,本次更新修复部分bug,最主要是增加了移动端APP的用户认证功能,以及添加了系统消息,为V4.5.29版本发布.这两个功能PC端的 ...
- VS2010暂停编译界面
注:文章主要知识点来源于https://www.felix021.com/blog/read.php?981 本人主要是按照自己的理解略微整理,感谢原博主Felix201的分享! 正文如下 刚上手VS ...
- 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——收流篇:(三)RTSP命令解析
一.RTSP命令简述 RTSP是用来控制实时流媒体“播放”.“暂停”.“停止”.“录像”等行为的传输协议.该协议规定了一系列命令以及这些命令的发送格式,RTSP客户端可以通过发送这些指定的命令,从而控 ...
- python测试框架nose
据说nose是一个比较牛逼的单元测试框架,今天打算来学习学习. nose不是python自带模块,这里我才用pip的方式安装 pip install nose 这样就完成了安装,然后再确认下是否安装成 ...
- EasuUI-js(EasyUI formatter格式化教程) 判断常用:
EasuUI-js(EasyUI formatter格式化教程) 判断常用: 1.YN标记: formatter : function(c1, row,index) { var a = "& ...
- window.parent.document jquery
使用 jQuery ,写法如下: .$("#myEle", window.parent.document).html(html); 另外还有一种实现方式,代码如下: .parent ...
- Java中的i=i++
public class Demo_01 { public static void main(String[] args) { int a = 10; int b = 20; int i = 0; i ...
- VMware Workstation 12 Pro 之安装Windows10 EP系统
VMware Workstation 12 Pro 之安装Windows10 EP系统... --------------- 先准备好要用的Win10的镜像文件ISO ---------------- ...
- 记一次帮客户做SEO诊断:新站收录后优化一个月了,排名一直没上去
一.网站问题 新网站建设有一个多月了,一直在优化,但是网站一直没有排名,不知道什么原因.接下来针对这个网站分析一下原因. 二.诊断分析 看一下网站的基础数据,如图: < 可以看出来网站只有一个多 ...