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程序设计》第四周学习总结的更多相关文章

  1. Java程序设计第四周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. 答:①String类是final类,不能定义String的子类. ② instanceof ...

  2. 杨其菊201771010134《面向对象程序设计(java)》第四周学习总结

    <面向对象程序设计(java)> 第四周学习总结 第一部分:理论知识 1.类与对象 a.类(class)是构造对象的模板或蓝图.由类构造对象的过程称为创建类的实例: java中类声明的格式 ...

  3. 对于“2017面向对象程序设计(JAVA)第四周学习总结”存在问题的反馈

    对于“2017面向对象程序设计(JAVA)第四周学习总结”存在问题的反馈 “这部分同学博文总结没有写,实验作业没有提交.”——1.关于博文作业.实验作业教学功能的正解:学习知识.暴露问题.衔接课上.2 ...

  4. 201871010106-丁宣元 《面向对象程序设计(java)》第四周学习总结

    201871010106-丁宣元 <面向对象程序设计(java)>第四周学习总结 正文开头 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-da ...

  5. 20155318 2016-2017-2 《Java程序设计》第九学习总结

    20155318 2016-2017-2 <Java程序设计>第九学习总结 教材学习内容总结 学习目标 了解JDBC架构 掌握JDBC架构 掌握反射与ClassLoader 了解自定义泛型 ...

  6. 《Java程序设计》第二学习总结

    <Java程序设计>第二学习总结 教材学习内容总结 类型 byte(字节) shot(短整型) int(整型) long(长整型) float(浮点型) double(双精度) char( ...

  7. 20145304 刘钦令 Java程序设计第二周学习总结

    20145304 <Java程序设计>第2周学习总结 教材学习内容总结 java可区分基本类型和类类型(即参考类型)两大类型系统. 基本类型主要可区分为整数.字节.浮点数.字符与布尔. 整 ...

  8. 20145304 刘钦令 Java程序设计第一周学习总结

    20145304<Java程序设计>第1周学习总结 教材学习内容总结 1995年5月23日,是公认的Java的诞生日,Java正式由Oak改名为Java. Java的三大平台是:Java ...

  9. 20145120黄玄曦 《java程序设计》 寒假学习总结

    1和2.我对未来规划不多,我认为好好学习积累知识能帮助我应对未来的挑战,这是我的学习动力之一,此外,了解新知识满足好奇心也是我的主要的学习动力. 3.我认为专业课学习比公务员考试重要,我认为专业知识是 ...

  10. 201621123007 Java程序设计第一周 学习总结

    第一周-Java基本概念 201621123007 <Java程序设计> 第一周学习总结 1. 本周学习总结 java是面向对象的一类语言,三大特征:封装性,继承性,多态性. jdk jr ...

随机推荐

  1. CentOS下Redis安装配置小结

    Redis是REmote DIctionary Server的缩写. 是一个使用 C 语言写成的,开源的 key-value 非关系型数据库.跟memcached类似,不过数据可以持久化. Redis ...

  2. ASP.Net MVC开发基础学习笔记(4):校验、AJAX与过滤器

    一.校验 — 表单不是你想提想提就能提 1.1 DataAnnotations(数据注解) 位于 System.ComponentModel.DataAnnotations 命名空间中的特性指定对数据 ...

  3. Oracle 创建表空间一边串过程

    1.打开SQL Plus,根据提示输入用户名密码登录. 注意:如果是系统用户的话,只能用sysdba登录.例如:sys as sysdba,输入User的密码进行登录. 2.登录成功后,首先创建表空间 ...

  4. HDU3870 Catch the Theves(平面图最小割转最短路)

    题目大概说给一个n×n的方格,边有权值,问从求(1,1)到(n,n)的最小割. 点达到了160000个,直接最大流不好.这题的图是平面图,求最小割可以转化成求其对偶图的最短路,来更高效地求解: 首先源 ...

  5. HDU3157 Crazy Circuits(有源汇流量有上下界网络的最小流)

    题目大概给一个电路,电路上有n+2个结点,其中有两个分别是电源和负载,结点们由m个单向的部件相连,每个部件都有最少需要的电流,求使整个电路运转需要的最少电流. 容量网络的构建很容易,建好后就是一个有源 ...

  6. ural 1255. Graveyard of the Cosa Nostra

    1255. Graveyard of the Cosa Nostra Time limit: 1.0 secondMemory limit: 64 MB There is a custom among ...

  7. CF# Educational Codeforces Round 3 C. Load Balancing

    C. Load Balancing time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...

  8. 【转】Xcelsius2008 水晶易表问题 部分汇总

    要使用 Xcelsius 2008,需要安装 Adobe Flash 吗? 若要正常运行 Xcelsius 2008,必须安装 Adobe Flash Player 版本 9.如果在安装过程中没有安装 ...

  9. gulp顺序执行任务

    gulp的任务的执行是异步的. 所以,当我写完一系列的任务,准备一股脑地执行. # gulp.task('prod', ['clean', 'compass', 'image', 'style', ' ...

  10. Android 热补丁和热修复

    参考: 各大热补丁方案分析和比较 Android App 线上热修复方案 1. Xposed Github地址:https://github.com/rovo89/Xposed 项目描述:Xposed ...