前言

又到了大家最喜欢的前言时间,哈哈哈。我这个人啊,就是比较爱闲聊。正式在学校呆的第一天时间就在这里敲代码,自己都觉得自己伟大。不过好无聊呀....这周的内容说实话讲我还是挺感兴趣的,因为书上的例子讲的游戏比较心动。虽然就是简单的属性配置,但是一谈到游戏就感觉好有干劲。这么说是不是不太好~不过是真的有干劲儿的嘞!起码玩这么多的游戏,现在知道了它的属性配置也是极好的。废话不多说了,切入正题。

一.继承与多态

1.继承的定义

面对对象中,子类继承父类,避免重复的行为定义,不过并非为了避免重复定义行为就使用继承,滥用而继承会导致程序维护上的问题。

程序代码重复在程序设计上就是不好的信号,多个类间出现重复的代码时,设计上可以考虑的改进方式之一,就是把相同的程序提升为父类。

在java中,继承时使用extends关键字,private成员也会被继承,只不过子类无法直接存取,必须通过父类提供的方法来存取。

在Java中,子类只能继承一个父类,继承有个重要的关系,就是子类和父类之间会有is-a的关系,要开始理解多态,必须先知道操作的对象是哪一类。

书上面剑士法师的这个代码我还是很感兴趣的,虽然别人都知道,但是还是分享一下吧。
第一个是可以运行的RPG软件。

package ch06;

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(200);

System.out.printf("魔法师: (%s,%d,%d)%n",magician.getName(),magician.getLevel(),magician.getBlood());

}

}

第二个这是被继承的代码。

package ch06;

public class Role {

private String name;

private int level;

private 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;

}

}

这个是对于剑士的定义,通过继承来实现。

package ch06;

public class SwordsMan extends Role {

public void fight(){

System.out.println("挥剑攻击");

}

}

这个是对于魔法师的定义,通过继承来实现。

package ch06;

public class Magician extends Role {

public void fight(){

System.out.println("魔法攻击");

}

public void cure(){

System.out.println("魔法治疗");

}

}

虽然SwordsMan与Magician没有定义getName()、getLevel()、与getBlood()等方法,但从Role继承了这些方法,所以就如同例子中可以直接使用。
继承的好处之一,就是若要将name、level、blood改为其他名称,那就只要修改Role.java就可以了,只要是继承Role的子类都无须修改。
最后的程序运行结果:

虽然界面挺low的哈,看了后面的东西,再填进去几个界面也不是啥难事。好想做个游戏啊,要超厉害的那种。

2.多态与is-a

在Java中,子类只能继承一个父类,继承除了可避免的行为定义外,还有个重要的关系,那就是子类和父类之间会有is-a的关系。

编译程序就是语法检查器,要知道程序片段为何可以通过编译,为何无法通过编译,就是将自己当做编译程序,检查语法逻辑是否正确,方式是从=号的右边往左边读:右边是不是左边的一种。

什么是多态?以抽象讲法解释,就是使用单一的接口操作多种类型的对象。检查多态语法逻辑是否正确,方式是从右边往左读:右边是不是一种左边呢?如果不是就会编译失败,如果加上扮演语法,编译程序就会让程序代码通过编译,不过后果自负,也就是扮演失败,执行时会抛出ClassCastException。

3.重新定义

在继承父类之后,定义与父类中相同的方法部署,但执行内容不同,这称为重新定义。因为对父类中已定义的方法执行不满意,所以在子类中重新定义执行。

4.final关键字

如果class前使用了final关键字定义,那么表示这个类是最后一个了,不会再有子类,也就不能被继承。定义方法时,也可以是限定该方法为final,这表示最后一次定义方法了,也就是子类不可以重新定义final方法。

· 接口与多态

抽象类:java可以定义没有方法体的方法,该方法的具体实现由子类完成,该方法称为抽象方法,包含抽象方法的就是抽象类。抽象类和抽象方法必须用abstruct关键字来修饰。

interface:接口定义行为但不可定义操作。 接口中的成员修饰符是固定的。类与接口是实现关系,而且类可以继承一个类的同时实现多个接口。

public interface Swimmer{public abstract void main swim(); }

implements:类要操作接口,使用implements关键字,操作接口时,对接口中定义的方法的两种处理方式:1.操作接口中定义的方法,2.将该方法标示为abstract

例如:

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(); }

类与类之间存在着继承关系,类与接口中间存在的是实现关系。继承用extends,实现用implements

在interface接口中常常可以定义枚举常数(例:public static final int),实际上,在interface接口中也只能定义public static final的枚举常数,并且一定要使用=指定值,否则就会编译错误。

抽象类与接口的区别 1:抽象类只能被继承,而且只能单继承。 接口需要被实现,而且可以多实现。 2:抽象类中可以定义非抽象方法,子类可以直接继承使用。 接口中都有抽象方法,需要子类去实现。 3:抽象类使用的是 is a 关系。 接口使用的 like a 关系。 4:抽象类的成员修饰符可以自定义。 接口中的成员修饰符是固定的。全都是public的。

enum:enum语法可用于定义枚举常数,enum实际上定义了类,而enum中列举的常数实际上是public static final,无法撰写程序直接实例化枚举类型,因为构造函数权限设定为private,只有类中才可以实例化。enum 可定义枚举常数,但实际上 enum 定义了特殊的类,继承自 java.lang.Enum,编译过后会产生 Action.class 文件,可用这个 Action 声明类型

public class Game {public static void main(String[] args){ play(Action.RIGHT); play(Action.UP); //只能传入 Action 实例 } public static void play(Action action){ // action 参数声明为 Action 类型,所以只接受 Action 的实例,这样就不需要必须使用 default 检查,编译程序在编译时期会进行类型检查 switch(action){ case STOP: out.println("播放停止动画"); break; case RIGHT: out.println("播放向右动画"); break; case LEFT: out.println("播放向左动画"); break; case UP: out.println("播放向上动画"); break; case DOWN: out.println("播放向下动画"); break; } } }

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

刚开始学习继承的时候敲第一个角色游戏代码出现错误,在继承的时候,需要将完整的代码都放在同一个文件夹下,书中有时候只是展现一部分代码,但前面的角色定义还要敲上去,保证代码的完整性,这样子类才会继承父类。 教材中的一些内容讲得十分详尽,例如多态与is-a,翻来覆去讲不同的语句可能出现的编译失败的情况及原因,这部分的学习也十分重要,关系到以后写出来的东西有没有弹性、好不好维护的问题;书中也有一些表述比较少,让人看得不是很懂的地方,例如instanceof运算符,Override等,只能通过视频加以学习。现阶段还停留在敲书上代码的过程,希望自己能够在接下来提出些更有价值的问题。

代码调试中的问题和解决过程

interface Some {protected static final int x = 10; } public class Main { public static void main (String[] args){ System.out.println(Some.x); } }

被声明为protected的成员,相同包中的类可以直接存取,不同包中的类需要在继承后的子类中存取。代码中没有继承关系不同类,编译失败,删去protected编译通过结果为10

其他(感悟、思考等)

没啥感悟了,明天实习,找机会接着码字,敲代码。我爱学习,学习使我快乐。哈哈哈哈哈哈哈。明早升旗。世界晚安。

转载于:https://www.cnblogs.com/20145207lza/p/5816252.html

20145207 《Java程序设计》第4周学习总结相关推荐

  1. 20175317 《Java程序设计》第一周学习总结

    20175317 <Java程序设计>第一周学习总结 教材学习内容总结 本周学习了Java大致的开发步骤,完成了课件自带的习题. 学习了在windows与Linux系统下不同的编译方法,掌 ...

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

    20155227 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC简介 JDBC全名Java DataBase Connectivity,是java联 ...

  3. 20172318 2016-2017-2 《Java程序设计》第一周学习总结

    20172318 2016-2017-2 <Java程序设计>第一周学习总结 教材学习内容总结 在教材中基本明白了计算机系统的运行方式,了解了对于高级语言是使用是掌握好编程的关键,掌握了一 ...

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

    20155303 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 『注意』 "//"为单行批注符: "/*"与&quo ...

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

    20175208 2018-2019-2 <Java程序设计>第九周学习总结 一.教材学习内容总结: 第11章 JDBC与MySQL数据库 MySQL数据库管理系统 MySQL数据库管理系 ...

  6. 20175204 张湲祯 2018-2019-2《Java程序设计》第九周学习总结

    20175204 张湲祯 2018-2019-2<Java程序设计>第九周学习总结 教材学习内容总结 -第十一章JDBC和MySQL数据库要点: 1.下载MySQL和客户端管理工具navi ...

  7. 20155313 2016-2017-2 《Java程序设计》第二周学习总结

    20155313 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 1.1 基本类型 整数:可细分为short整数(占2字节).int整数(占4字节)与long ...

  8. 20155226 2016-2017-2 《Java程序设计》第一周学习总结

    20155226 2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 第一周主要学习了一二章的内容,也浏览了剩余章节,以下是本周主要学习内容总结 1.首先了解了[ ...

  9. 20172325 2018-2019-1 《Java程序设计》第二周学习总结

    20172325 2018-2019-1 <Java程序设计>第二周学习总结 教材学习内容总结 3.1集合 集合是一种聚集.组织了其他对象的对象.集合可以分为两大类:线性集合和非线性集合. ...

  10. 张旭升20162329 2006-2007-2 《Java程序设计》第一周学习总结

    20162329 2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 通过打书上的代码熟悉了Java编程的基本过程 教材学习中的问题和解决过程 1.因为我的虚拟机 ...

最新文章

  1. 服!AI 让兵马俑“活”起来,颜值惊艳!
  2. JSON转换和毫秒时间
  3. idea 文件流读取web-inf下的文件_C#初学者教程系列20:Stream流读写
  4. 语音写出(wavwrite)
  5. Lucene从入门到进阶(6.6.0版本)
  6. 把char*转换为wchar_t*
  7. python --> Python初阶 --> 基础语法 --> 条件和分支
  8. redhat5 oracle11g安装全程详解,RedHat5+Oracle11g安装全程详解.doc
  9. 全面认识Small Cell
  10. opengl源码 实现无缝切换图片过场_OpenGL学习笔记(六)变换
  11. CVPR 2021 最佳论文!对抗神经网络GAN解决3D场景难题
  12. 一道经典极限题的分析与求解
  13. C语言 strftime 格式化显示日期时间 时间戳
  14. TokenInsight:BTC新增流量稳定,但泡沫指数已超17年峰值
  15. bzoj2705 [SDOI2012]Longge的问题
  16. 如何在 Mac 上重命名 Apple Magic Mouse?
  17. USACO 2.1 海明码(DFS)
  18. NB-ioT的工作状态和工作模式
  19. 瑞萨RH850芯片在IAR和CS+编译环境下设置堆(heap)和栈(stack)的大小
  20. 逆水寒捏脸服务器维护,逆水寒捏脸数据分享_全职业捏脸数据一览

热门文章

  1. 不同路径—leetcode62
  2. 优图yolo-v2 loss解析(tensorflow)
  3. CF-477C(Dreamoon and Strings) DP
  4. php动态生成链接,PHP动态生成javascript文件的2个例子
  5. 手机壳鸿蒙,手机壳黑榜发布 真相太惊人!
  6. java加载xml配置文件_java读取配置文件的几种方法
  7. if、for、while、do while、switch (区别于if、while)解析
  8. php图片旋转验证码,如何用php生成扭曲及旋转的验证码图片
  9. linux ubuntu fadora,两大主流Linux版本Ubuntu 18.04和Fedora 28的对比
  10. Struts2解析FreeMarker模板中变量的顺序