20145104张家明 《Java程序设计》第4周学习总结
20145104张家明 《Java程序设计》第4周学习总结
教材学习内容总结
第六章
1、继承的定义及目的
面向对象中,子类继承父类,避免重复的行为定义。不过并非为了避免重复定义行为就使用继承,滥用继承而导致程序维护上的问题时有所闻。如何正确判断使用继承的时机,以及继承之后如何活用多态,才是学习继承的重点。以书上158页的例子来看,magician中粗体字部分与swordsman中相对应的程序代码重复了,重复在设计上就是不好的信号,如果我们想将name、level、blood改为其他名称,那就要修改swordsman与magician两个类,如果有更多类具有重复的程序代码,那就要修改更多类,造成维护上的不便。如果要改进,可以把相同的程序代码提升为父类(Role)。这里引入了一个新的关键字“extends”。它表示SwordsMan与Magician会扩充Role的行为,也就是继承Role的行为。SwordsMan与Magician不止可以继承Role的行为,还可以扩充原来Role没有的行为。继承就是为了避免多个类间重复而定义共同行为。继承的好处之一就是若你要将name、level、blood改为其他名称,那就只要修改Role.java就可以了,只要是继承Role的子类都无需修改。这里要注意一点,private成员会被继承,只不过子类无法直接存取,必须通过父类提供的方法来存取。
2、多态
什么叫多态?以抽象讲法解释,就是使用单一借口操作多种类型的对象。
例如:showBlood()方法中,既可以通过Role类型操作SwordsMan对象,也可以通过Role类型操作Magician
如果某方法区块中没有任何程序代码操作,可以使用abstract标示该方法为抽象方法,该方法不用撰写{}区块,直接“;”结束即可。类中若有方法没有操作,并且标示为abstract,表示这个类定义不完整,因此也就不能用来生成实例。Java中规定内含抽象方法的类,一定要在class前标示abstract,表示这是一个定义不完整的抽象类。
使用是一种(is-a)原则,就可以判断何时编译成功,何时编译失败,以及将扮演看作编译程序住嘴语法。书上165页的范例为我们展示了一种多态的写法,这样的写法好处何在?就算有100种角色,只要他们都是继承Role,都可以使用这个方法显示角色的血量,而不需要像前面重载的方式,多态的写法显然具有更高的可维护性。什么叫多态?多态就是使用单一接口操作多种类型的对象,注意这里的接口并不是专指java中的interface,而是指对象上可操作的方法。
3、继承的一些重要语法
1、protected成员
public abstract class Role5
{
protected String name;
protected int level;
protected int blood;
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;
}
}
public class Magician5 extends Role5
{
public void fight()
{
System.out.println("魔法攻击");
}
public String toString()
{
return String.format("魔法师 (%s, %d, %d)", this.name, this.level, this.blood);
}
}
2、重新定义的细节
public abstract class Role6
{
public String toString()
{
return String.format("(%s, %d, %d)", this.name, this.level, this.blood);
}
}
3、java.lang.Object
子类只能继承一个父类,如果定义类时没有使用extends关键字指定继承任何类,那一定是继承java.lang.Object
import java.util.Arrays;
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;
}
}
第七章
1、何谓接口
接口这个词,还是有点小熟悉,说起来,对接口的认识,还是多亏了我们数据结构的老师,我们最最片面的认识,接口就是USB,充电器就这么简单;但是数据结构老师给我们举了很多的例子,比如触屏、触控板、声音输出设备、电视等等,都是接口,所以这是一个挺广泛的概念。现在通过看书学习有了新的认识,对于“定义行为”,可以使用interface关键字定义,例如public、 interface、 Swimmer,接口中的方法不能操作,直接表示为abstract,而且一定是public。类要操作接口,必须使用implements关键字。操作某接口时,对接口中定义的方法有两种处理方式,一是操作接口中定义的方法,二是再度将该方法标示为abstract,例如: 鱼会游泳
以java的语意来说,而继承是is-a的关系,操作接口则表示“拥有行为”关系,对于接口多态语法的判断,方式是“右边是不是拥有左边的行为”,或者“右边对象是不是操作了左边接口”。接口可以继承别的接口,也可以同时继承两个以上的接口,同样也是使用extends关键字,这代表了继承父接口的行为。
enum实际上定义了类,而enum中列举的常数,实际是public static final,且为枚举类型实例,无法撰写程序直接实例化枚举类型,因为构造函数权限设定为private,只有类中才可以实例化。
public class Anemonefish extends Fish{
public Anemonefish(String name){
super(name);
}
@Override
public void swim();{
System.out.printf("小丑鱼 %s 游泳%n",name);
}
}
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();
}
2、接口小语法
import static java.lang.System.out;
public class Game{
public static void main(String[] args){
play(Action.RIGHT);
play(Action.UP);
}
public static void play(int action){
switch(action){
case Action.STOP:
out.println("播放停止动画");
break;
case Action.RIGHT:
out.println("播放向右动画");
break;
case Action.LEFT:
out.println("播放向左动画");
break;
case Action.UP:
out.println("播放向上动画");
break;
case Action.DOWN:
out.println("播放向下动画");
break;
default:
out.println("不支持此动作");
}
}
}
教材学习中的问题和解决过程
啃教材真的是一件很让人头疼的事情,但是每一件有意义的事情都不是那么的容易,这一次的篇章相对上一周要少一些,但是我还是会认真的去看,去学习,就向我爸总教育我的那样,师父引进门,修行在个人,现在的自学可能是我现阶段做的最有意义的事情了吧!
其他(感悟、思考等,可选)
学习java还是要静下心来去潜心研究,因为,看书一遍,说实话,以我的的水平,一下理解根本是不太可能的,所以,面对难懂的内容,真的是要去桥代码,在运行代码,调试的时候,可以对理论性的东西有更透彻的理解,我喜欢用对象对类进行理解,这样感觉起来真的是很顺畅。
学习进度条
| 代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
|---|---|---|---|---|
| 目标 | 5000行 | 30篇 | 400小时 | |
| 第一周 | 200/200 | 2/2 | 20/20 | 自学能力 |
| 和学习java的兴趣增强 |
参考资料
20145104张家明 《Java程序设计》第4周学习总结的更多相关文章
- 20145302张薇 《Java程序设计》第二周学习总结
20145302张薇 <Java程序设计>第一周学习总结 教材学习内容总结 第三章 第三章讲的是基本类型,变量,运算符和基本条件语句. 基本类型分为: 整数:short(2 byte),i ...
- 20145302张薇《Java程序设计》第九周学习总结
20145302 <Java程序设计>第九周学习总结 教材学习内容总结 第十六周 JDBC简介 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC目的:让Jav ...
- 20145104张家明 《Java程序设计》第10周学习总结
20145104张家明 <Java程序设计>第10周学习总结 教材学习内容总结 网络编程 网络编程就是两个或多个设备(程序)之间的数据交换. 识别网络上的每个设备:①IP地址②域名(Dom ...
- 20145104张家明 《Java程序设计》第四次实验设计
20145104张家明 <Java程序设计>第四次实验设计 这第四次实验报告 我们开始着手安卓了 在电脑上安装了安卓虚拟机
- 20145104张家明 《Java程序设计》第9周学习总结
20145104张家明 <Java程序设计>第9周学习总结 教材学习内容总结 第16章 -撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找. -JDBC目的:让Java ...
- 20145104张家明 《Java程序设计》第8周学习总结
20145104张家明 <Java程序设计>第8周学习总结 教材学习内容总结 第15章 -java.util.logging包提供了日志功能相关类与接口,不必额外配置日志组件,就可以在标准 ...
- 20145104张家明 《Java程序设计》第7周学习总结
20145104张家明 <Java程序设计>第7周学习总结 教材学习内容总结 第13章 简单认识时间和日期 -时间的度量:GMT.UT.TAI.UTC.Unix.epoch. -UTC:保 ...
- 20145104张家明 《Java程序设计》第一周学习总结
20145104张家明 <Java程序设计>第1周学习总结 教材学习内容总结 在开学的第一周,通过了看书进行了系统的学习java,首先简单的了解java的发展历程,然后了解了JVM.JRE ...
- 20145104张家明 《Java程序设计》第2周学习总结
20145104张家明 <Java程序设计>第2周学习总结 教材学习内容总结 本周学习了第三章的内容,看过之后呢,学的和c语言是相通的,看起来就是非常的顺畅,自我感觉良好,第三章主要讲了一 ...
- 20145104张家明 《Java程序设计》第3周学习总结
20145104张家明 <Java程序设计>第4周学习总结 教材学习内容总结 第四章 认识对象 4.1 类与对象 4.1.1 定义类 类定义时使用class关键词,建立实例要用new关键词 ...
随机推荐
- ubuntu下Eclipse创建Django项目
(注:部分过程可能需要FQ) Eclipse版本:Mars.x 点击help->Eclipse Marketplace,搜索“PyDev”并下载安装. 然后选择window->prefer ...
- AndroidのUI体验之上拉下拉
1.ScrollView监测是否滚动到顶部或底部 onScrollChanged(); 滚动到顶部判断:getScrollY() == 0 滚动到底部判断:getChildAt(0).getMeasu ...
- MUI 图片上传剪切预览,可选(拍照+系统相册)
整合网上的例子..麻蛋.没跑通..没办法.自己就拿他们的例子完善了一下..已经可以使用了! 准备工作: 这几个文件要引入.特别是JS 文件!!! <link href="../css/ ...
- 日记整理---->2016-11-01
这里我们整理一下项目的流程,一般来说做一个模块之前.会有需求文档.页面原型和接口文档. 一. js获取radio的值 页面的html代码: <ul class="list-group& ...
- android基础组件---->Button的使用
按钮由文本或图标(或文本和一个图标)组成,当用户触摸到它时,会发生一些动作.今天我们开始Button的学习.少年的爱情永远不够用,一杯酒足以了却一件心事. Button的简要说明 根据你是否想要一个带 ...
- java基础---->java输入输出流
今天我们总结一下java中关于输入流和输出流的知识,博客的代码选自Thinking in java一书.我突然很想忘了你,就像从未遇见你. java中的输入流 huhx.txt文件的内容如下: I l ...
- JavaIO简单代码实例
最近又复习了下JavaIO写了些实例代码都很简单但是能体现大部分方法的用法. IO流实现文件的拷贝 几种不同的方法: package com.wxisme.TestIO; import java. ...
- web移动端一些常用知识
1.去掉 a,input 在移动端浏览器中的默认样式(半透明灰色遮罩阴影) a,button,input,optgroup,select,textarea { -webkit-tap-highligh ...
- 【BZOJ1453】[Wc]Dface双面棋盘 线段树+并查集
[BZOJ1453][Wc]Dface双面棋盘 Description Input Output Sample Input Sample Output HINT 题解:话说看到题的第一反应其实是LCT ...
- 百度地图api定位和导航简写
function locate() { // 百度地图API功能 var map = new BMap.Map("allmap"); // 创建Map实例 var point = ...