20145337《Java程序设计》第四周学习总结
20145337《Java程序设计》第四周学习总结
教材学习内容总结
继承与多态
继承
- 继承,避免多个类间重复定义共同行为
- 符合DRY(Don't Repeat Yourself)原则,多个类间出现重复的程序时,可改进为将相同的程序代码提升为父类
- 使用
extends
关键字,private
成员也会被继承,只不过子类无法直接存取,须通过父类提供的方法
多态
子类只能继承一个父类,子类父类之间存在
ISA
的关系检查多态逻辑语法是否正确,方式是从“=”右边往左读;判断右边是不是一种左边(右边类型是不是左边类型的子类),如果不是就会编译失败。如果加上扮演(Cast)语法,编译程序会让程序代码通过编译,不过很有可能会扮演失败,执行时抛出ClassCastException的错误。
封装是继承的基础,继承是多态的基础
「用父类声明对象引用,用子类生成对象」就有了多态
多态就是使用单一接口操作多种类型的对象,例如
`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("Monica");
magician.setLevel(1);
magician.setBlood(100); showBlood(swordsMan);
showBlood(magician);
}
static void showBlood(Role role){
System.out.printf("%s 血量 %d%n",role.getName(),role.getBlood());
}
}`
覆盖
- 子类中出现与父类一模一样的方法时,会出现覆盖操作。一般来说,当子类需要父类的功能,而功能主体子类有自己特有内容时,可以覆盖父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容。
- 父类中的私有方法不可以被覆盖,在子类覆盖方法中,继续使用被覆盖的方法可以通过super.函数名获取。
- 覆盖需要注意的是:覆盖时,子类方法权限一定要大于等于父类方法权限,并且静态只能覆盖静态。
抽象方法、抽象类
- 如果某方法区块中没有任何程序代码操作,可以使用abstract标示该方法为抽象方法,该方法不用撰写{}区块,直接“;”结束即可。类中若有方法没有操作,并且标示为abstract,表示这个类定义不完整,因此也就不能用来生成实例。Java中规定内含抽象方法的类,一定要在class前标示abstract,表示这是一个定义不完整的抽象类。
继承语法细节
- 在Java中有public、protected、private三个权限关键字,但实际上有四个权限范围:
关键字 | 类内部 | 相同包类 | 不同包类 |
---|---|---|---|
public | 可存取 | 可存取 | 可存取 |
protected | 可存取 | 可存取 | 子类可存取 |
无 | 可存取 | 可存取 | 不可存取 |
private | 可存取 | 不可存取 | 不可存取 |
- 如果想取得父类中的方法定义,可以在调用方法前,加上super关键字,重新定义的时候要注意,对于父类中的方法权限,只能扩大不能缩小。如果想执行父类中某构造函数,可以使用super()指定,但要注意的是,this()和super()只能选择其中之一调用,并且一定要在构造函数第一行执行。
- class前也可以加上final关键字,如果class前使用了final关键字定义,那么表示这个类是最后一个了,没有子类,不能被继承。同样,定义方法时,也可以限定该方法为final。
java.long.Object
- 定义类时未使用extends关键字指定继承任何类型,为继承java.lang.Object,Java中的所有对象,都满足“是一种”Object
Object c1 = "Justin";Object c2 = new Date();
- 任何类型的对象,都可以使用Object声明的名称来参考
- 对于不再有用的对象,JVM有垃圾收集机制,收集到的垃圾对象所占据的内存空间,会被垃圾收集器释放。执行流程时,无法通过变量参考的对象,就是GC认定的垃圾对象。
接口与多态
对于“定义行为”,在Java中可以使用interface关键字定义:
package cc.openhome; public interface Swimmer{ public abstract void swim(); }
接口可以用于定义行为但不定义操作。类要操作接口,必须使用implements关键字。操作某接口时,对接口中定义的方法有两种处理方式,一是操作接口中定义的方法,二是再度将该方法标示为abstract.
操作接口则表示“拥有行为”,但不会有“是一种”的关系。Java中经常见到在接口中定义这类常数,称为枚举常数。事实上,在interface中,也只能定义public static final的枚举常数。在接口中枚举常数,一定要使用=指定值,否则就会编译错误。
接口可以继承别的接口,也可以同时继承两个以上的接口,同样也是使用extends关键字,这代表了继承父接口的行为。在JDK8之后,如果父接口中定义的方法有操作,也代表了继承父接口的操作。
教材学习中的问题和解决过程
对于这两章的学习,看的比较仔细,单纯机械的调试书上的代码,若有错误,也是因为粗心,并非语法错误
public class Role {
private String name;
private int level;
private int blood;
public void fight(){
}
public int getBlood(){
return blood;
}
public void setBlood(int blood){
this.blood = blood;
}
public int getLevel(){
return level;
}
public void setLevel(int level){
this.level = level;
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
}
P178
import java.util.Arrays;
import java.util.Objects;
public class ArrayList {
private Object[] list;
private int next;
public ArrayList(int capacity){
list = new Object[capacity];
}
public ArrayList(){
this(16);
}
public void add(Object o){
if(next == list.length){
list = Arrays.copyOf(list,list.length *2);
}
list[next++] = o;
}
public Object get(int index){
return list[index];
}
public int size(){
return next;
}
}
代码调试中的问题和解决过程
问题一:对包的了解不够,机械的将教材上的代码敲到分立的.java文件中运行,显示找不到类或方法
- 解决过程:回顾第二章,将分立的代码放在共同的包内,就可以了
本周代码托管截图
其他(感悟、思考等,可选)
虽然在短短的周末安排两章的学习内容,有点多,所幸有所收获,虽然还有自主的编辑过JAVA代码,但“动手题”里提供了一些思路,确实有进步。计算机二级的考试题很简单,然根基不稳,再加上没有复习,所以C语言一直掌握的不好。当务之急,是提高学习的效率,光是看书、调试书上的代码,对我来说,应付考试尚可,自己编辑就难说。我会继续努力。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 2/2 | 20/20 | 了解JAVA环境 |
第二周 | 300/500 | 2/4 | 18/38 | 编写HelloWorld |
第三周 | 500/1000 | 3/7 | 22/60 | 了解类、封装 |
第四周 | 300/1300 | 2/9 | 30/90 | 继承与多态 |
参考资料
20145337《Java程序设计》第四周学习总结的更多相关文章
- Java程序设计第四周学习总结
1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. 答:①String类是final类,不能定义String的子类. ② instanceof ...
- 杨其菊201771010134《面向对象程序设计(java)》第四周学习总结
<面向对象程序设计(java)> 第四周学习总结 第一部分:理论知识 1.类与对象 a.类(class)是构造对象的模板或蓝图.由类构造对象的过程称为创建类的实例: java中类声明的格式 ...
- 对于“2017面向对象程序设计(JAVA)第四周学习总结”存在问题的反馈
对于“2017面向对象程序设计(JAVA)第四周学习总结”存在问题的反馈 “这部分同学博文总结没有写,实验作业没有提交.”——1.关于博文作业.实验作业教学功能的正解:学习知识.暴露问题.衔接课上.2 ...
- 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 ...
随机推荐
- javaEE基础
1.拦截器与过滤器 过滤器(filter),过滤器处于客户端与Web资源(Servlet.JSP.HTML)之间,客户端与Web资源之间的请求和响应都要通过过滤器进行过滤.如过滤编码,IP 拦截器(i ...
- zookeeper 3.4.6启动流程粗略梳理
zookeeper 3.4.6 启动脚本里面 nohup "$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" " ...
- iOS学习26之UINavigationController
1. UINavigationController 1> 概述 UINavigationController : 导航控制器, 是 iOS 中最常用的多视图控制器之一, 用它来管理多个视图控制器 ...
- 【转】crontab定时任务中文乱码问题
转载:http://blog.163.com/rettar@126/blog/static/1216503422012135511740/ 手动执行都很正常的的脚步,添加到定时任务中一直执行失败,日志 ...
- topcoder SRM 618 DIV2 WritingWords
只需要对word遍历一遍即可 int write(string word) { ; ; i < word.length(); ++ i){ cnt+=word[i]-; } return cnt ...
- IOS UI segmentedControl UISegmentedControl 常见属性和用法
UISegmentedControl中一些常见的属性和用法 //设置以图案作为分段的显示,仅需要图案的轮廓,这样颜色为分段的背景颜色 // NSArray *items = @[[UIImage ...
- Jquery实现下拉联动表单
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- URAL 1203. Scientific Conference(瞎搞)
题目链接 本来觉得这不是经典的贪心吗..果断水一次,wa了,看了看discuss,发现貌似不好水,土土的DP了一下,复杂度很高了,又T了...然后想想单调队列,二分什么的...不好往上加,直接搞了标记 ...
- 【BZOJ3343】教主的魔法 分块+二分
Description 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息组每个英雄看.于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1.2.…….N. 每个人的 ...
- About_AJAX_02
学习AJAX基础: 首先要:掌握AJAX技术.掌握AJAX开发步骤.掌握采用AJAX进行实例开发 AJAX应用到的技术: AJAX(Asynchronous JavaScript And XML)涉及 ...