20155324 2016-2017-2 《Java程序设计》第4周学习总结

教材学习内容总结

继承

面对对象中,子类继承父类,避免重复定义行为就使用继承。在Java中,继承时使用extends关键字,private成员也会被继承,只不过子类无法直接存取,必须通过父类提供的方法来存取。

package cc.openhome;

public class RPG {
public static void main(String[] args) {
demoSwordsMan();
demoMagician();
} static void demoSwordsMan() {
SwordsMan swordsMan = new SwordsMan();
swordsMan.setName("Justin");
swordsMan.setLevel(1);
swordsMan.setBlood(200);
System.out.printf("劍士:(%s, %d, %d)%n", swordsMan.getName(),
swordsMan.getLevel(), swordsMan.getBlood());
} static void demoMagician() {
Magician magician = new Magician();
magician.setName("Monica");
magician.setLevel(1);
magician.setBlood(100);
System.out.printf("魔法師:(%s, %d, %d)%n", magician.getName(),
magician.getLevel(), magician.getBlood());
}
}

执行结果如下:

剑士:(Justin,1,200)
魔法师:(Monica,1,200)

继承也符合DRY(Don't Repeat Yourself)原则

多态与is-a

子类只能继承一个父类,继承有个重要的关系,就是子类与父类间会有is-a的关系。

以抽象讲法解释,就是使用单一接口操作多种类型的对象。

  • 继承可以复用代码,更大的用处是实现「多态」
  • 封装是继承的基础,继承是多态的基础
  • 「用父类声明对象引用,用子类生成对象」就有了多态

抽象方法、抽象类

  • abstract
  • Java中有抽象方法的类一定是抽象类,但抽象类中的方法不一定都是抽象方法
  • 抽象类不能使用new生成对象

public/package/protected/private

  • super与this
  • java.lang.Object
toString
equals
hashCode
instanceof
  • 垃圾收集(Garbage Collection,GC)
  1. 无法通过变量引用的对象就是GC认定的垃圾对象

2.垃圾回收前会调用finalize()方法,但由于调用时机无法确定,建议不要使用finalize()方法

  • 设计模式

    参考实验二 Java面向对象程序设计中的「模式」

接口定义行为

  • 对于“定义行为”,可以使用interface关键字定义,接口中的方法不能操作,直接标示为abstract,而且一定是public。类要操作接口,必须使用implements关键字。操作某借口时,对接口中定义的方法有两种处理方式,一是操作接口中定义的方法,二是再度将该方法标示为abstract。
package cc.openhome;

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

人类

package cc.openhome;

public class Human implements Swimmer {
private String name;
public Human(String name) {
this.name = name;
}
public String getName() {
return name;
} @Override
public void swim() {
System.out.printf("人類 %s 游泳%n", name);
}
}

鲨鱼

package cc.openhome;

public class Shark extends Fish {
public Shark(String name) {
super(name);
} @Override
public void swim() {
System.out.printf("鯊魚 %s 游泳%n", name);
}
}
  • 继承会是有“一种关系”,操作接口则表示“拥有行为”,但不会有“是一种”的关系。对于接口多态语法的判断,方式是“右边是不是拥有左边的行为”,或者“右边对象是不是操作了左边接口”。
package cc.openhome;

public class Ocean {
public static void main(String[] args) {
doSwim(new Anemonefish("尼莫"));
doSwim(new Shark("蘭尼"));
doSwim(new SwimPlayer("賈斯汀"));
doSwim(new Submarine("黃色一號"));
doSwim(new Seaplane("空軍零號"));
doSwim(new FlyingFish("甚平"));
} static void doSwim(Swimmer swimmer) {
swimmer.swim();
}
}
package cc.openhome;

public class Seaplane extends Airplane implements Swimmer {
public Seaplane(String name) {
super(name);
} @Override
public void fly() {
System.out.print("海上");
super.fly();
} @Override
public void swim() {
System.out.printf("海上飛機 %s 航行海面%n", name);
}
}
  • 类可以操作两个以上的类,也就是拥有两种以上的行为。类可以同时继承某个类,并操作某些接口。接口可以继承自另一个接口,也就是继承父接口行为,再在子接口中额外定义行为。

教材学习中的问题和解决过程

  • 如果两个接口都定义了某方法,操作两个接口的类并不会有错误,照样通过编译,但两个接口都有定义额方法是否表示不同的行为?
  • 可能有不同的行为,接口可以继承别的接口,也可以同时继承两个以上的接口,同样也是使用extends关键字,这代表了继承父接口的行为。

代码托管

  • 代码提交过程截图:

  • 代码量截图:

上周考试错题总结

  • 调用p145 sum函数计算1+2+3+4+5的代码是(MathTool.sum(1,2,3,4,5))
  • 做题的时候没有想到利用MathTool.sum来解决问题导致错误。
  • public void someMethod()和public int someMethod()是方法重载。(x)
  • 对概念的理解错误。导致了问题的错误。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第四周 400/500 1/1 15/20

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。

耗时估计的公式

:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

参考:软件工程软件的估计为什么这么难软件工程 估计方法

参考资料

20155324 2016-2017-2 《Java程序设计》第4周学习总结的更多相关文章

  1. # 20155337 2016-2017-2 《Java程序设计》第九周学习总结

    20155337 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 JDBC(Java DataBase Connectivity)即java数据库连 ...

  2. 20145213《Java程序设计》第九周学习总结

    20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

  3. 20145213《Java程序设计》第二周学习总结

    20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...

  4. 20145213《Java程序设计》第一周学习总结

    20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...

  5. 21045308刘昊阳 《Java程序设计》第九周学习总结

    21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...

  6. 20145330孙文馨 《Java程序设计》第一周学习总结

    20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...

  7. 20145337 《Java程序设计》第九周学习总结

    20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...

  8. 20145337 《Java程序设计》第二周学习总结

    20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...

  9. 20145218《Java程序设计》第一周学习总结

    20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...

  10. 《Java程序设计》第九周学习总结

    20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...

随机推荐

  1. pandas 轮询dataframe

    轮询有一个挺好的方式,df.iterrows() 这个函数同时返回 索引和行对象的生成器可以直接进行遍历. import pandas as pd df = pd.read_csv("dru ...

  2. Tbox在整车CAN网络的位置与作用

    我们讲到了智能车载娱乐系统的5个基本特征: 基本来说, 当今的智能车机基本有以下几个特点: 基于智能操作系统: Android, Yunos, Linux等 基本都是虚拟按键, 较少用实体按键 具备外 ...

  3. Yii2 如何输出 sql 语句?

    可以用 $model->find()->createCommand()->getRawSql(); 不能带 all(). find() 它的 返回值类型是 yii\db\Active ...

  4. 从Java的角度简单修复Cookie越权漏洞

    技术实在是有限,讲解cookie越权的时候可能有点简单和粗糙.这里就简单记录学习下. 首先自己写一段存在漏洞的代码code: sendCookie.java package cookie; impor ...

  5. (三)flask中的请求钩子函数

    请求勾子 在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要处理,比如: 在请求开始时,建立数据库连接: 在请求开始时,根据需求进行权限校验: 在请求结束时,指定数据的交互格式: 为了让每个视图 ...

  6. linux系统调用之用户管理

    getuid 获取用户标识号 setuid 设置用户标志号 getgid 获取组标识号 setgid 设置组标志号 getegid 获取有效组标识号 setegid 设置有效组标识号 geteuid ...

  7. C connect实现Timeout效果(Linux)

    C connect函数是阻塞的,现要实现非阻塞式的connect. int SocketClient::connectTimeOut(const int &connect_fd, const ...

  8. Game1---游戏设计

    自己玩的一些游戏简单策划 先设计3个类似的游戏场景,第一个场景只进行时间限制,第二个场景道具进行上下移动,第三个场景随机生成敌人: 1.上面的台阶道具应该是随着人物的高度上升逐渐生成,逐渐呈现在玩家的 ...

  9. Python3的第一个程序

    软件:Anaconda Navigator集成开发环境中的Spyder,自带Python,无需单独安装. 注意:Python对缩进和空格敏感,代码必须对齐(包括注释),否则出现错误unexpected ...

  10. tar压缩解压文件

    查看visualization1.5.tar.gz 压缩包里面的内容: $ tar -tf visualization1.5.tar.gz 解压指定文件JavascriptVisualRelease/ ...