20145213《Java程序设计》第四周学习总结


教材学习内容总结

本周任务是学习面向对象的继承、接口以及之后的如何活用多态。(还真是路漫漫其修远兮啊!)教材也是延续上周艰深晦涩的语言风格,好在小生早有准备,利用重复出真知的原理,以时间换出一点点成果,与大家分享。

1.继承

  • 继承的意义就是避免多个类间重复的共同行为。说白了,把两个或者多个类中重复的代码抓出来,附上新的类名称从而形成的类,我们称之为父类。子类利用extends关键词扩充父类的过程就是继承。如下代码所示,SwordsMan 继承了 Role,并扩容了原本 Role 没有的 fight 行为。
public class SwordsMan extends Role{
public void fight(){
System.out.println("挥剑攻击");
}
}
  • 子类只能继承一个父类,就好比每个儿子都只有一个爸爸。父子之间存在血缘关系。子类与父类之间存在 is-a 关系。子类继承了父类,所以子类是一种父类。同时,请谨慎使用不要啰嗦法,在这里不赘述了。

    2.继承多态

  • 多态就是使用单一接口操作多种类型的对象。我们结合代码来更清楚认识一下

public clss RPG2{
public static void main(String[] args){
SwordsMan swordsman1 = new SwordsMan();
swordsman1.setName("Justin");
swrodsman1.setLevel(1);
swordsman1.setBlood(200); SwordsMan swordsman2 = new SwordsMan();
swordsman2.setName("Qiwei");
swrodsman2.setLevel(1);
swordsman2.setBlood(200) showBlood(swordsman1);
showBlood(swordsman2);
}
static void showBlood(Role role){
System.out.printf("%s 血量 %d%n",role.getName(),role.getBlood());
}
}

在 showBlood 方法中通过 Role 类型操作 swordsman1 对象和 swordsman2 对象。

3.重新定义行为

  • 在继承父类之后,定义与父类中相同的方法部署,但执行内容不同,这称为重新定义。其实,给的我个人感觉就是 多态+重新定义行为=在子类扩容行为.。
  • 在重新定义行为后调用方法,调用的是子类中的行为。如果想调用父类的,要利用 super 关键词。(前提不能定义为private哦)。
  • 需注意,在重新定义父类中某个方法时,子类必须撰写与父类方法中相同的签署。对于手残党和粗心党,我们可以利用 @Override 要求编译程序检查该方法是不是真的重新定义了父类中某个方法。

4.抽象方法、抽象类

  • 为了解决生活中某些不合理的要求,比如需求无法决定,却要撰写出程序等等,我们可以利用abstract关键词表示该方法为抽象方法。该方法不用撰写{}区块,直接“;”结束即可。包含抽象方法的类可是要连坐的,class 前标示 abstract。子类如果继承抽象父类,要么标示自己也是 abstract ,要么就是操作抽象方法。结合代码看一下吧。
public abstract class GuessGame{
public void go(){
int number = (int) (Math.random() *10);
int guess;
do{
print("输入数字");
guess = nextInt();
}while(guess != number);
println("猜中了");
} public void println (String text){
print(text + "\n");
} public abstract void print(String text)
public abstract int nextInt();
}

类的定义不完整,包含抽象方法,因此显示输出与取得输入都不能操作。等到需求解决了,就可以编写个子类继承 GuessGam,并操作当中的抽象方法。像这样子

import java.util.Scanner;
public class ConsoleGame extends GuessGame{
private Scanner scanner = new Scanner(System.in);
@Override
public void print(String text){
System.out.print(text);
}
@Override
public void println(String text){
System.out.println(text);
}
@Override
public int nextInt(){
return scanenr.nextInt();
}
}

5.语法细节

  • 被 protected 关键词声明的成员,相同包中的类可以直接存取,不同包中的类可以在继承后的子类直接存取。
  • 创建子类实例后,会先执行父类构造函数定义的流程,再执行子类构造函数定义的流程。如果子类构造函数中没有指定执行父类中哪个构造函数,默认会调用父类中无参数构造函数。
  • class 前可以加上final关键字,表示这个类是最后一个了,不会再有子类,不能再被继承了。方法同理。
  • 程序流程中已经无法再使用某个对象,该对象就是耗内存的垃圾,会被清理。所占内存空间会被垃圾收集器释放。

6.接口

  • 想比较继承 extends 让父类与子类有了 is-a 的关系, interface 关键字定义某个接口,表示什么行为。
public interface Swimmer{
public abstract void swim(); }

定义了Swimmer行为,如果还结合 implements 关键字,辣么就赋予某类拥有Swimmer行为。

public abstact class Fish implements Swimmer{
protected String name;
public Fish(String name){
this.name = name;
}
public String getName(){
return name;
}
@Override
public abstract void swim();
}

Fish拥有Swimmer行为了。

  • 类可以操作两个以上的行为,也可以同时继承某个类的同时,并操作某些接口。

7.行为的多态

  • 只要是操作某个接口的对象,就拥有接口对应的行为。
 public class Ocean{
public static void main (String[] args){
doSwim(new Anemonefish("尼莫"));
doSwim(new Human("贾斯丁"));
}
static void doSwim(Swimmer swimmer){
swimmer.swim();
}
}

只要是操作 swimmer 接口的对象都可以使用代码中 doSwim 方法。

8.接口的语法细节

  • 接口中的方法没有操作时,一定得是公开并且抽象的。

  • 如下为枚举常数,为了让程序撰写更清晰一些。

public interface Action {
public static final int STOP = 0;
public static final int RIGHT = 1;
public static final int LEFT = 2;
public static final int UP = 3;
public static final int DOWN = 4;
}
  • 类可以操作两个以上的接口,如果有两个接口都定义了某方法,编译照样可以通过。如果表示不同的行为,那操作时,应该有不同的方法操作,名称上应该有所不同。如果表示相同的行为,可以定义在一个接口上。
  • enum 关键字可用于定义枚举常数

其他

说点正题吧,本周的代码给我感觉竟有点汽车人合体的味道。淡化了个体,强调了每个部分代码之间的联系,而这个联系有的叫继承,有的叫多态等等。真的很抱歉,博客写到这里出了意外,我的手指尖被锋利的剃须刀划伤。有点痛楚,主要影响打字了。我就简言以蔽之了。之前说到,本周学习内容依旧是晦涩难懂的,一开始我还是无所得,失落的我于是敲打课本中的代码聊以自慰。最后竟也敲出一点数量的代码,于是我陷入了一种漂浮的满足感中,下意识是博客内容有着落了,虽然学习体会不多,但我可以拿代码来凑。或许刚才那次受伤就是上天对我这个错误想法的警告吧。我一直认为自学Java是一个注定孤独的旅程,没有老师直接循循善诱的路灯,缺少课后习题统一解答的风景。缺少导游声情并茂的解说,再优美的风景也是走马观花式地欣赏。在浅尝遏止的认知下,代码的心事也将流于不为人知的秘密。偶然听闻有优秀博客出世,大多也是乘兴而来,败兴而归。恕我直言,不知道什么时候起,一篇随笔的优秀程度竟与作者在博客中粘贴的代码的数量挂钩,在我看来是不合理的。博客是记录自己学习心得体会,或向读者传授个人经验的平台。粘贴太多自己敲过的代码而不加以分析,一来,占据大量篇幅,影响读者阅读摄取知识,宛如鸡肋般,食之无味,弃之可惜。二来,这种没有灵魂的代码不是作者学习情况最真实的体现,相反很容易带来我上述的虚浮的满足感,稀释学习的努力劲。我在逛其他同学的博客时,很看重他自己的原创内容,他所描绘的Java世界。我印象很深的就是良葛格的Java世界观,他曾说,类就像设计衣服的概念图,根据类创出的实例就像根据概念图设计衣服一样。真是一语惊醒梦中人,形象的太贴切了,我瞬间清楚地认识了类与实例。或许你们看来这可能只是一个很基本的概念,但不能否认这是夯实我所认识的Java世界的基石。于是我想摈弃之前博客格式,套入一大堆代码,重点想结合代码谈体会。这是一个博客格式探索的过程,吾将上下而求索。

托管截图


学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 20/20 1/1 10/10
第二周 200/220 1/2 15/25
第三周 200/420 1/3 15/40
第四周 200/620 1/4 15/55

参考资料

*Java学习笔记(第8版)

*《Java学习笔记(第8版)》学习指导

20145213《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. VBA 表操作1

    VBA 新建表.批量建表 例1 创建一个工作簿 注意 .name 与 .range ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ...

  2. VMware 关闭虚拟机 Ubuntu 12 的 3D 效果,提高性能

    Ubuntu 2012,有 2D 和 3D 的渲染效果,但是 在虚拟机中,开启 3D 效果后,特别卡.好在 VMware 中有个“关闭3D”的开关,如下图所示: 去掉勾选“加速 3D 图形”

  3. PHP Closure类Bind与BindTo方法

    Closure类为闭包类,PHP中闭包都是Closure的实例: 1 $func = function(){}; 2 var_dump($func instanceof Closure); 输出 bo ...

  4. php服务端写日志文件

    1.需求 在服务端记录日志 2.基础版 最基础的文件读写,(要注意window和linux的换行符,window是\r\n,linux是\n),这里就写入一个时间. <?php $handle ...

  5. C++ const用法 尽可能使用const [转载]

    C++ const 允许指定一个语义约束,编译器会强制实施这个约束,允许程序员告诉编译器某值是保持不变的.如果在编程中确实有某个值保持不变,就应该明确使用const,这样可以获得编译器的帮助. 1.c ...

  6. mysql 将指定列的浮点数转化为整数

    mysql 将指定列的浮点数转化为整数: update A set B =  cast(B as decimal(10,0))  -- 或者 update A set B = round(B,0) 例 ...

  7. access数据库用sql语句添加字段,修改字段,删除字段

    用 Create Table 建立一个表 Table1 ,主键是自动编号字段,另一个字段是长度是 10 的文本字段. 代码如下:CREATE TABLE Table1 (Id COUNTER CONS ...

  8. Codeforces 710 D. Two Arithmetic Progressions

    Description \(x=a_1k+b_1=a_2l+b_2,L\leqslant x \leqslant R\) 求满足这样条件的 \(x\) 的个数. Sol 扩展欧几里得+中国剩余定理. ...

  9. linux下编译安装boost库

    linux下编译安装boost库 linux下编译安装boost库 1.下载并解压boost 1.58 源代码 下载 解压 2.运行bootstrap.sh 3.使用b2进行构建 构建成功的提示 4. ...

  10. peewee 字段属性help_text的支持问题

    至少在__version__ = '2.6.0'的时候,给字段添加help_text的时候,在数据库的ddl语句里面是没有comment的. 看了下源码,顺藤摸瓜,最终定位到了字段(Field类)的_ ...