博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
20145104张家明 《Java程序设计》第4周学习总结
阅读量:4467 次
发布时间:2019-06-08

本文共 4411 字,大约阅读时间需要 14 分钟。

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);}@Overridepublic 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;}@Overridepublic 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的兴趣增强

参考资料

  • ...

转载于:https://www.cnblogs.com/wodedadao/p/5327099.html

你可能感兴趣的文章
MySql知识体系
查看>>
JIRA中的标记语言的语法参考
查看>>
hdu 6318 Swaps and Inversions(归并排序)
查看>>
用css在IE7、8上实现圆角
查看>>
三维绿幕标定与跟踪
查看>>
android ProgressBar自定义半圆形进度条
查看>>
hdu.5212.Code(莫比乌斯反演 && 埃氏筛)
查看>>
python学习记录一
查看>>
IP通信基础 4月1日
查看>>
KeyProvider
查看>>
空指针为什么能调用成员函数?
查看>>
用MySQL的存储过程来实现一些经典函数
查看>>
React (2) -- State and Lifecycle
查看>>
关于SqlDateTime溢出的问题
查看>>
jquery下php与ajax的数据交换方式
查看>>
魅蓝Note有几种颜色 魅蓝Note哪个颜色好看
查看>>
使用PullToRefresh实现下拉刷新和上拉加载
查看>>
透明度百分比与十六进制转换
查看>>
HBase表预分区
查看>>
NSBundle,UIImage,UIButton的使用
查看>>