20155227 2016-2017-2 《Java程序设计》第四周学习总结
20155227 2016-2017-2 《Java程序设计》第四周学习总结
教材学习内容总结
继承
- 继承
继承是Java程序设计语言面向对象的又一重要体现,允许子类继承父类,避免重复的行为定义。
Java只支持单继承,不支持多继承,即子类只能继承一个父类,但是支持多层继承。继承的出现提高了代码的复用性,也让类与类之间产生了关系,提供了多态的前提。
- extends
在Java中,使用关键字extends来表示类与类之间的继承关系。如:
public class Magician extends Role
{
public void fight()
{
System.out.println("魔法攻击");
}
表示Magician扩充Role的行为,即继承后者的行为。也就是类Role中有定义的程序代码,类Magician因为继承而都拥有了。而fight()为Magician扩充的Role没有的行为。
- private
private成员也会被继承,不过子类无法直接存取,必须通过父类提供的方法存取。
is-a(是一种)关系
子类只能继承一个父类,这种子类父类之间的关系就是is-a关系。
检查语法逻辑是否正确,方式是从=右边往左读:判断右边是不是一种左边。
强制让后者是一种前者:
Role role1=new SwordsMan();SwordsMan swordsman=(SwordsMan) role1;
多态
多态指的是使用一个接口,操作多种类型的数据。例如以下代码中,既可以通过Role操作SwordsMan对象,也可以通过Role操作Magician对象。
public class RPG2
{
public static void main (String[] args)
{
SwordsMan swordsMan = new SwordsMan();
swordsMan.setName("Justin");
swordsMan.setLevel(1);
swordsMan.setBlood(200);
Magician magician = new Magician();
magician.setName("Moinca");
magician.setLevel(1);
magician.setBlood(100);
showBlood(swordsMan); //SwordsMan是一种Role
showBlood(magician);
}
static void showBlood(Role role) //声明为Role类型
{
System.out.printf("%s 血量 %d%n",role.getName(), role.getBlood());
}
}
重新定义行为
- 重新定义父类中某个方法时,子类必须撰写与父类方法中相同的签署。可以在子类中某个方法前使用@Override要求编译程序检查该方法是不是真的重新定义了父类中某个方法,如果不是会引发编译错误。
- 对于父类中的方法权限,只能扩大不能缩小。
抽象方法 抽象类
- 抽象方法:某方法区块中没有任何程序代码操作,用abstract表示该方法为抽象方法,不用撰写{}区块,直接";"结束即可
- 抽象类:内含抽象方法的类,一定要在class前标示abstract,表示类定义不完整,不能用来生成实例。
protected
- 被声明为protected的成员,相同包中的类可以直接存取,不同包中的类可以在继承后的子类直接存取。
- private、无关键字、protected、public权限依次递增。
构造函数
类有继承关系时,会先进行父类定义的初始流程,再进行子类定义的初始流程。
父类中可以重载多个构造函数,如果子类构造函数中没有制定执行父类中哪个构造函数,默认会调用父类中无参数构造函数。this()和super()只能择一调用,并且要写在构造函数第一行执行。
final
class或方法被声明为final,表示这是最后一个,不会再有子类或子类不可以重新定义方法。
Object
java.lang.Object是最上层父类,Java中所有对象一定是一种Object。
接口
- 接口是一种特殊的类,里面全部是由全局常量(static final)和公共的抽象方法所组成。
- 接口中的方法没有操作时一定得是公开且抽象的。
- 类要操作接口必须用implements关键字。
- 接口的数据成员,只允许被public, static, final修饰。
接口的方法成员,只允许被public, abstract修饰。 - 操作某接口时,对接口中定义的方法有2种处理方式,一是操作接口中定义的方法,二是再度将该方法标示为abstract.
- 接口中的public abstract可以省略,但要注意:接口中的方法必须是“抽象方法”,不能有方法体,允许省略public及abstract关键字
- 接口中可以使用extends继承接口,并且可以继承多个接口
接口不能继承一个抽象类,却可以通过extends同时继承于多个接口。
解决需求变化
增加新的需求,原有的程序无需修改,只需针对新需求撰写程序,就是有弹性、具可维护性的程序。
枚举常数
使用enum:enum定义了特殊的类,继承自java.lang.Enum,由编译程序处理。
匿名内部类
临时继承某个类或操作某个接口并建立实例,由于这类子类或接口操作类只使用一次,不需要为这些类定义名称,可以使用匿名内部类。
教材学习中的问题和解决过程
- 1问题
如果子类构造函数中没有指定执行父类中哪个构造函数,默认会调用父类中无参数构造函数,那要怎样指定调用哪个函数呢?
- 1解决方案
如果想执行父类中某构造函数,可以使用super()指定,要注意this()与super()只能选择一个调用,而且一定要在构造函数一一行执行。
- 2问题
第七章一开始就提到“别滥用继承”,继承不是可以提供很多方便吗?为什么不能多用?
- 2解决方案
带着疑问开始看第七章,看到第一个例子,“所有东西都会游泳”,如果不停地使用继承的方法,程序架构就越来越不合理,越来越没有弹性。这是因为Java中智能继承一个父类,所以更强化了“是一种”关系的限制性。继承是牵一发而动全身的东西,所以要慎用。这就解决了我关于“为什么不能滥用继承”的疑问。
代码调试中的问题和解决过程
- 1问题
在编写继承相关的代码的时候不能调用父类的代码,无法编译成功。
- 1解决方案
在同一project下把父类编写之后,在编写人物代码时只要写了public class xxxxxx extends Role{} 它就会自动的调用父类Role的代码。
代码托管
代码提交过程截图:
代码量截图:
上周考试错题总结
上周错的题还挺多的,但是很可惜有的错题记不住了。
- 错题1:System.out.println(“”+52+25);的结果是(5225);System.out.println(52+25+“”);的结果是(77)。
- 总结:考试的时候其实不太清楚“”+是什么意思,考完之后编译了一遍发现答案是5225,感觉很奇怪,看了狄维佳同学的博客之后才清楚。原来是因为System out println(""+i);等价于System.out.println(i.toString());。public String toString()返回该对象的字符串表示。通常,ToString()方法会返回一个“以文本方式表示”此对象的字符串。因此在本题中以字符串形式输出5225。
- 错题2:“30”转化为byte类型的30的语句是(Byte.parseByte(“30”);)
- 总结:查询API文档可知,java.lang.Byte.parseByte()方法的作用是:将字符串参数转换为带符号的十进制数。
其他(感悟、思考等,可选)
通过这两章的学习,我对继承、多态和接口有了初步的了解。这些概念都是Java对象之间的一种关系。一周的时间虽然看完了书,写完了博客也照着书上敲了许多代码,但要消化这些知识还远远不够,所以还依赖于以后代码的实践与真正的应用。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 10/10 | 1/1 | 20/20 | |
第二周 | 98/108 | 1/2 | 20/40 | |
第三周 | 401/509 | 1/3 | 15/55 | |
第四周 | 700/1209 | 1/4 | 20/75 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
计划学习时间:25小时
实际学习时间:20小时
参考资料
20155227 2016-2017-2 《Java程序设计》第四周学习总结的更多相关文章
- Java程序设计第四周学习总结
1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. 答:①String类是final类,不能定义String的子类. ② instanceof ...
- 对于“2017面向对象程序设计(JAVA)第四周学习总结”存在问题的反馈
对于“2017面向对象程序设计(JAVA)第四周学习总结”存在问题的反馈 “这部分同学博文总结没有写,实验作业没有提交.”——1.关于博文作业.实验作业教学功能的正解:学习知识.暴露问题.衔接课上.2 ...
- 杨其菊201771010134《面向对象程序设计(java)》第四周学习总结
<面向对象程序设计(java)> 第四周学习总结 第一部分:理论知识 1.类与对象 a.类(class)是构造对象的模板或蓝图.由类构造对象的过程称为创建类的实例: java中类声明的格式 ...
- 201871010106-丁宣元 《面向对象程序设计(java)》第四周学习总结
201871010106-丁宣元 <面向对象程序设计(java)>第四周学习总结 正文开头 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-da ...
- 20155318 2016-2017-2 《Java程序设计》第九学习总结
20155318 2016-2017-2 <Java程序设计>第九学习总结 教材学习内容总结 学习目标 了解JDBC架构 掌握JDBC架构 掌握反射与ClassLoader 了解自定义泛型 ...
- 《Java程序设计》第二学习总结
<Java程序设计>第二学习总结 教材学习内容总结 类型 byte(字节) shot(短整型) int(整型) long(长整型) float(浮点型) double(双精度) char( ...
- 20145304 刘钦令 Java程序设计第二周学习总结
20145304 <Java程序设计>第2周学习总结 教材学习内容总结 java可区分基本类型和类类型(即参考类型)两大类型系统. 基本类型主要可区分为整数.字节.浮点数.字符与布尔. 整 ...
- 20145304 刘钦令 Java程序设计第一周学习总结
20145304<Java程序设计>第1周学习总结 教材学习内容总结 1995年5月23日,是公认的Java的诞生日,Java正式由Oak改名为Java. Java的三大平台是:Java ...
- 20145120黄玄曦 《java程序设计》 寒假学习总结
1和2.我对未来规划不多,我认为好好学习积累知识能帮助我应对未来的挑战,这是我的学习动力之一,此外,了解新知识满足好奇心也是我的主要的学习动力. 3.我认为专业课学习比公务员考试重要,我认为专业知识是 ...
- 201621123007 Java程序设计第一周 学习总结
第一周-Java基本概念 201621123007 <Java程序设计> 第一周学习总结 1. 本周学习总结 java是面向对象的一类语言,三大特征:封装性,继承性,多态性. jdk jr ...
随机推荐
- Beta阶段——第五篇 Scrum 冲刺博客
i. 提供当天站立式会议照片一张: ii. 每个人的工作 (有work item 的ID) (1) 昨天已完成的工作: 对宿舍权限的管理 (2) 今天计划完成的工作: 完善权限管理,进行舍员充值分明 ...
- Python多线程获取返回值
在使用多线程的时候难免想要获取其操作完的返回值进行其他操作,下面的方法以作参考: 一,首先重写threading类,使其满足调用特定的方法获取其返回值 import threading class M ...
- 【大数据】Azkaban学习笔记
一 概述 1.1 为什么需要工作流调度系统 1)一个完整的数据分析系统通常都是由大量任务单元组成: shell脚本程序,java程序,mapreduce程序.hive脚本等 2)各任务单元之间存在时间 ...
- Codeforces 893F(主席树+dfs序)
在子树内和距离不超过k是一个二维限制,容易想到主席树,但主席树显然没法查最小值,因为不满足区间可减.kdtree和二维线段树可以干这事,但肯定会T飞.但事实上我们的问题有一个特殊性:对某个点x,查询其 ...
- P2129 L国的战斗续之多路出击
题目描述 这一次,L国决定军队分成n组,分布在各地,若以L国为原点,可以看作在一个直角坐标系内.但是他们都受统一的指挥,指令部共发出m个命令.命令有移动.上下转移和左右转移(瞬移??),但是由于某些奇 ...
- Sort HDU - 5884(优先队列+二分)
Sort Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- 【hdu4010】 Query on The Trees
http://acm.hdu.edu.cn/showproblem.php?pid=4010 (题目链接) 题意 link cut tree板子 Solution link cut tree 细节 注 ...
- C++接口继承与实现继承的区别和选择
1.接口继承与实现继承的区别 <Effective C++>条款三十四:区分接口继承和实现继承中介绍的比较啰嗦,概括地说需要理解三点: (1)纯虚函数只提供接口继承,但可以被实现: (2) ...
- bzoj 3779: 重组病毒
一道好题~~ 一个点到根传染需要的时间是这段路径上不同颜色的数目,一个点子树到根平均传染时间就是加权平均数了(好像是废话). 所以只要用线段树维护dfs序就这个可以了,换根的话一个点的子树要么在dfs ...
- Python之旅:元组
作用:存多个值,对比列表来说,元组不可变(是可以当做字典的key的),主要是用来读#定义:与列表类型比,只不过[]换成()age=(11,22,33,44,55)本质age=tuple((11,22, ...