20145335郝昊《java程序设计》第4周学习总结
20145335郝昊 《Java程序设计》第4周学习总结
教材学习内容总结
第六章
何谓继承:
概念:
面向对象中,为避免多个类间重复定义共同行为。(简单说就是将相同的程序代码提升为父类。)
- 特点:
- 这里接触到了新的关键词,extends,在java语言中用estends来继承父类的行为。
- is-a原则,在java中子类只能继承一个父类。要开始理解多态,必须先知道操作的对象是“哪一种”。
- 多态,使用单一接口操作多种类型的对象。
- 在继承父类之后,定义与父类中相同的方法部署,但执行内容不同,称为重新定义。
- 如果某方法区块真的没有任何程序代码操作,可以直接使用abstract标识该方法为抽象方法,该方法不用撰写{}区块,直接“;”结束即可。
- 注意:
- 关键字extends是为了扩充和继承父类的行为。
- 在java中一个子类只能继承一个父类。
- 在判断操作对象是“哪一种”的时候,检查语法的逻辑是否正确,方式是从=右边往左边读:右边是不是一种左边呢(右边类是不是左边类的子类)?
- 在重新定义中,子类必须撰写与父类方法相同的签署,如果因为疏忽打错字就会完全不同(虽然编译会成功,但是行为会完全不同),但在JDK5后标注@Override,表示要求编译程序检查是否真的重新定义父类中某个方法。
- 子类如果继承抽象类,对于抽象方法有两种做法,一种是继续标注该方法为abstract(必须在class前标注abstract),另一种就是操作抽象方法,如果都没有实施,则会出现编译错误。
继承语法细节:
特点:
- protected成员权限关键字,相同包中的类可以直接存取,不同包中的类可以在继承后的子类直接存取。(不开放访问权限,但可以直接存取。)
- 如果想要取得父类中的方法定义,可以调用方法前,加上super关键字。
- 在构造函数中,父类中可重载多个构造函数,如果子类中没有指定执行父类中的构造函数,默认会调用父类中无参数构造函数。
- 在class前使用了final关键字定义,那么表示这个类是最后一个,不会再有子类,也就相当于不能再被继承。在定义方法时候也可以限定为final,表示最后一次定义方法了,也就是子类不可以重新定义final方法。
- 在java继承中一定继承了java.lang.Object,简单来说任何类追溯至最上层类中一定是Object父类。
- 可以调用toString()以取得字符串描述来显示。
- java中要比较两个对象的实质是通过equals(),而不是使用==
注意:
- JAVA中有3个权限关键字,public、protected与private,但实际上有4个权限范围。
- 若原来成员public,子类中重新定义时不可谓private或protected。
- 在JDk5之前,重新定义方法时除了可以定义权限较大的关键字之外,其他部分必须与父类中方法签署完全一致。
- 在没有编纂任何构造函数时候,会自动加入没有参数的默认构造函数,但如果定义了构造函数,就不会加入任何构造函数。
- 在创建ArrayList实例时候,可以指定内部数组初始容量,如果使用无参数构造函数,则默认容量为16。
关于垃圾收集
在执行流程中,无法通过变量参考的对象,就是GC(Garbage Collection) 认定的垃圾对象。
关于抽象类
虽然是抽象方法,但在go()方法中,还是可以调用。
第七章
何谓接口
概念:
接口相当于另一种“继承”,可任意操作接口内的行为。
特点:
- 接触到了新的关键词interface。这里是针对“定义行为”,在java中可以使用interface关键字进行定义。类要操作接口必须使用implements关键字
- 接口可用于定义行为但不定义操作。
- 行为的多态,判断代码中如同is-a原则相同,“右边是不是拥有左边的行为”或者“右边对象是不是操作了左边的接口”
- 对于解决需求的变化,首先需要编写有弹性、维护性的程序,即增加新的需求,在原有的程序无需修改,只需针对新需求撰写程序。
- 在java中,类可以操作两个以上的类,也就是拥有两种以上的行为。
- 在编写一个好的程序代码的时候需要好的一个架构,各个架构之间可用操作接口来连接,也可以用子类继承父类来连接。
注意:
- 接口的操作与类的继承不同,在java中只能继承一个父类,但是类可以同时继承某个类,同样的可以同时操作某些接口。
- 关键字interface是用来定义操作的,关键字implements是用来类操作关键字的。
- 操作某接口时,有两种方法对接口进行定义,一种是操作接口中定义方法,另一种是再度将该方法标注abstract。
- 在判断行为的多态的时候,与判断is-a原则相同,从=的右边往左边读进行判断。
- 在java中,接口可以继承自另一个接口,也就是继承父接口行为。
接口语法细节
特点:
- 接口的默认,在java中可使用interface来定义抽象行为与外观,在接口中的方法没有操作时,一定得是公开且抽象,public abstract。
- 在接口枚举中,一定要使用=指定值,否则就会编译错误。
- 某些子类或操作接口类只使用一次,不需要为这些类定义名称,可以使用匿名内部类来解决需求。
- 在JDK5之后可用enum语法来定义枚举常数。
注意:
- 类可以操作两个以上的接口,如果两个接口都定义了某方法,如果表示相同的行为,那可以定义一个父接口,因为接口可以继承别的借口,也可以同时继承两个以上的接口,通样也是使用extends关键字。
- 在JDK8之前,要在匿名内部类中存取局部变量,则该局部变量必须是final,否则会发生编译失败。
- 关于enum定义枚举常数时候,实际上enum定义了特殊的类,继承自java.lang.Enum,直接撰写程序继承enum会被编译程序拒绝。因为构造函数权限设定为private,在实际定义的某个类中,才可以将其实例化。
教材学习中的问题和解决过程
第六章
在对于理解继承的存在一点问题,当利用关键字extends继承的时候,最开始编译的父类和之后即将继承的子类之间的关系的问题,是否需要将两个代码放到一起?如果放到一起,是否需要将其中的一个public公开类修改一下?在下课询问娄老师后知道了父类和即将继承的子类之间的关系,即不需要将两段代码放到同一个.java文件夹下,放到同一个package下就可以继承了。
不能很好的使用“is-a”原则判断何时可以编译成功何时可以编译失败,但是借助了书上的剑士与魔法师游戏的例子有所了解。比如: Role role1= new SwordsMan();Role role2 = new Magician();可以很好的有助于理解“哪一种”原则。
对于3个权限关键字,但是有4个权限范围的知识点,当看了书上的列举的表格和书上给的参照实例,也有所了解。
再构造函数部分,只知道在子类构造函数中没有指定执行某个父类中的构造函数,会默认调用无参构造函数,但是看书后得知先执行子类中的函数,如果想执行父类中某构造函数,可以用super()指定。
第七章
对于掌握操作接口的时候,遇到了和继承相类似的问题,是否需要将两段代码写入一个.java文件中?后来在调试书上OceanWorld的时候发现并不需要,同样的放到同一个package文件夹下就可以。
对于后来的构建框图的时候有一点问题,根源在于类可以操作两个以上的类,但是只能继承一个类。当把握住这一点时候,对于框图思路的搭建就好了许多,加上书上的Airplane的例子,首先设计一个Airplane作为Seaplane的父类,而Airplane操作Flyer的接口,Seaplane继承Airplane后操作Swimmer接口,这样Seaplane就有了可以飞行或者可以海面滑行的功能了。
在匿名内部类的时候,对于其语法的理解也并不透彻,但是在参考书上的Interface Clinet的例子中有了新的认识。
在使用enum定义枚举常数的时候,不理解在类中才可以实例化的意思。结合书上的Action的例子,发现enum实际上是一种继承,但不能直接编译,所以,在类中才可以将其实例化。
代码调试中的问题和解决过程
第六章
```
package cc.openhomesix;
public class SwordsMan extends Role {
public void fight(){
System.out.println("挥剑攻击");
}
}
```
首先因为最开始不太懂子类和父类继承之间的关系,不太懂是否需要将其放到同一个java文件夹中,后来发现不需要,放到同一个package下就可以,然后再编译SwordsMan的代码的时候发现有错误,仔细检查后发现是在于继承的Role存在问题,导致这个也发生了编译错误。
第七章
```
package cc.openhomeseven;
public class Submarine implements Swimmer{
private String name;
public Submarine(String name){
this.name=name;
}
public String getName(){
return name;
}
@Override
public void swim(){
System.out.printf("潜水艇 %s 潜行 %n",name);
}
}
```
这个代码最开是分不清关键字implements和关键字interface,这两个关键字具体的作用有点区别,所以在操作接口的时候发生了错误,但在书搞懂了之后就代码成功了。
本周代码托管截图
这就是本周的代码托管。
其他(感悟、思考等,可选)
这周的学习,感觉更多是一种延伸。真两周已经很明显可以感觉到学习java的压力了。在自习的时候的的确确存在很多问题,越来越觉得java的难度,但是同样的也感受到了java学习的魅力。虽然以前的c语言学习一般,但是通过这四周的java学习,还有自己代码的积累,渐渐的发现虽然敲代码是一件很枯燥无味的工作,但是敲完代码回头看发现这样的敲代码真的可以便于理解书上不懂得问题。就像编程一样,当遇到了问题后需要去尝试解决,去想办法解决问题。在着四周的学习,发现自己的元知识也扎实了不少,软知识也有了很大的提高。也发现这这种自主性学习好像学习完之后会更加有成就感。
学习进度条
|
博客量(新增/累积) |
学习时间(新增/累积) |
重要成长 |
|
目标 |
5000行 |
30篇 |
400小时 |
|
第一周 |
200/200 |
1/1 |
20/20 |
|
第二周 |
300/500 |
1/2 |
18/38 |
|
第三周 |
300/800 |
1/3 |
22/60 |
|
第四周 |
300/1100 |
1/4 |
30/90 |
参考资料
20145335郝昊《java程序设计》第4周学习总结的更多相关文章
- 20145335郝昊 Java学习心得 密码学代码复写
20145335郝昊 Java学习心得 密码学代码复写 本学期我们学习了现代密码学这门课程,在上课的时候接触到了很多种类型的密码体制,对于一些典型很通用的密码体制有自己的学习和设计.不论是从密码体制还 ...
- 20155210潘滢昊 2016-2017-2《Java程序设计》第一周学习总结
20155210 2016-2017-2<Java程序设计>第一周学习总结 教材学习内容总结 1.1.1: 本节主要讲了Java的由来,1995年5月23日是Java公认的诞生日.还有版本 ...
- 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学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...
随机推荐
- 11.Curator扩展库
Recipes组件包含了丰富的Curator应用的组件.但是这些并不是ZooKeeper Recipe的全部.大量的分布式应用已经抽象出了许许多多的的Recipe,其中有些还是可以通过Cura ...
- Zabbix的API的使用
上一篇:Zabbix低级主动发现之MySQL多实例 登录请求(返回一个token,在后面的api中需要用到) curl -s -X POST -H 'Content-Type:application/ ...
- HDU 1866 A + B forever!
A + B forever! Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- 20165330 实验一 Java开发环境的熟悉
一.实验内容及步骤 使用JDK编译.运行简单的Java程序 使用命令 cd 20165330 进入到学号目录下 mkdir exp1新建文件夹 mkdir bin src建立bin src目录 vim ...
- Spark源码分析 – Dependency
Dependency 依赖, 用于表示RDD之间的因果关系, 一个dependency表示一个parent rdd, 所以在RDD中使用Seq[Dependency[_]]来表示所有的依赖关系 Dep ...
- VMware 虚拟机 Ubuntu 不能全屏问题
在刚安装完ubuntu后,屏幕不能全屏显示,此时: 1.安装VMware Tools 步骤: 1.1 进入ubuntu系统后,点击虚拟机上的[虚拟机]->[安装 vmware tools ...
- python学习笔记(二)文件操作和集合
集合: 集合也是一种数据类型,一个类似列表东西,它的特点是无序的,不重复的,也就是说集合中是没有重复的数据 集合的作用: 1.它可以把一个列表中重复的数据去掉,而不需要你再写判断 2.可以做关系测试, ...
- Spark机器学习系列之13: 支持向量机SVM
Spark 优缺点分析 以下翻译自Scikit. The advantages of support vector machines are: (1)Effective in high dimensi ...
- kettle添加hadoop cluster时报错Caused by: java.lang.IllegalArgumentException: Does not contain a valid host:port authority: hadoop:password@node56:9000
完整报错是: Caused by: java.lang.IllegalArgumentException: Does not contain a valid host:port authority: ...
- HDU1176:免费馅饼(dp,数字三角形的应用)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1176 这题就是数字三角行的变形,可惜对于我这个渣渣来说就是没发现,区别是他可以保持在三个点,他左边的点,右 ...