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

一周两章新知识的自学与理解真的是很考验和锻炼我们,也对前面几章我们的学习进行了检测,遇到忘记和不懂的知识就再复习前面的,如此巩固也让我对之前的知识更深刻的理解了。

继承与多态

  • 继承基本上就是避免多个类间重复定义共同行为

  1. public class SwordsMan extends Role{
  2. public void fight(){
  3. System.out.println("挥剑攻击");
  4. }
  5. }
  1. 这里看到新的关键词extends,表示会继承Role的行为,并定义fight()方法的程序代码

  1. public class RPG {
  2. public static void main(String[] args) {
  3. demoSwordsMan();
  4. demoMagician();
  5. }
  6. static void demoSwordsMan(){
  7. SwordsMan swordsMan=new SwordsMan();
  8. swordsMan.setName("Justin");
  9. swordsMan.setLevel(1);
  10. swordsMan.setBlood(200);
  11. System.out.printf("剑士:(%s,%d,%d)%n",swordsMan.getName(),
  12. swordsMan.getLevel(),swordsMan.getBlood());
  13. }
  14. }
  1. - 虽然`SwordsMan``Magician`并没有定义`getName()``getLevel()``getBlood()`等方法,但从`Role`中继承了这些方法,所以就可以直接使用。
  2. - 执行结果如下:
  3. ![](http://images2015.cnblogs.com/blog/886442/201603/886442-20160327215825948-1607289495.png)
  4. - java中,子类只能继承一个父类
  5. - 子类与父类间会有ISA关系
  6. - 例如之前 `SwordsMan`继承了`Role`,所以`SwordsMan`是一种`Role`
  7. - 如果例子中游戏角色增多,一直重载会很麻烦,若所有角色都继承`role`
  1. public class RPG2 {
  2. public static void main(String[] args) {
  3. SwordsMan swordsMan = new SwordsMan();
  4. swordsMan.setName("Justin");
  5. swordsMan.setLevel(1);
  6. swordsMan.setBlood(200);
  7. Magician magician = new Magician();
  8. magician.setName("Monica");
  9. magician.setLevel(1);
  10. magician.setBlood(100);
  11. showBlood(swordsMan);
  12. showBlood(magician);
  13. }
  14. static void showBlood(Role role) {
  15. System.out.printf("%s 血量 %d%n",role.getName(),role.getBlood());
  16. }
  17. }

  1. ![](http://images2015.cnblogs.com/blog/886442/201603/886442-20160326160515323-1069362983.png)
  2. 这样写的好处就是就算有100种角色,只要他们都继承`role`就可以用这种方法显示血量,而不用像之前重载的方式
  3. - 多态以抽象方式解释,就是使用单一接口操作多种类型对象。若用范例解释:在`showblood`方法中,既可以通过`role`类型操作`swordsman`,也可以通过`role`类型操作`magician`对象
  4. - 继承可以复用代码,更大的用处是实现「多态」
  5. - 封装是继承的基础,继承是多态的基础
  6. - 在继承父类后,定义与父类中相同的方法部署,但执行内容不同,这称为重新定义
  7. - 继承语法细节
  8. - `public/package/protected/private`
  9. ![](http://images2015.cnblogs.com/blog/886442/201603/886442-20160326163233808-797037595.png)
  10. 被声明为`protected`的成员,相同包中的类可以直接存取,不同包中的类可以在继承后的子类里直接存取。
  11. - 垃圾收集
  12. - 无法通过变量引用的对象就是GC认定的垃圾对象
  13. - 垃圾回收前会调用finalize()方法,但由于调用时机无法确定,建议不要使用finalize()方法
  1. public class Magician extends Role{
  2. ...
  3. @Override
  4. public String toString(){
  5. return"魔法师"+super.toString();
  6. }
  7. }
  1. 可以使用`super`关键词调用的父类方法,不能定义为`private`
  2. - 重新定义方法要注意,对于父类中的方法权限,只能扩大不能缩小,若原来成员`public`,子类中重新定义时不可为`private``protected`
  3. - 构造函数可以重载,父类中可重载多个构造函数,如果子类构造函数中没有指定执行父类中那个构造函数,默认会调用父类中无参数的构造函数
  4. - 如果指定变量值之后,就不想再改变变量值,可以在声明变量时加上`final`限定,如果后续写程序时,想修改`final`变量,就会出现编译错误
  5. - `class`前也可以加上`final`关键字,如果`class`前使用了`final`关键字定义,那么表示这个类是最后一个了,不会再有子类,也就是不能被继承。
  6. - 以下是几个典型代码
  1. public abstract class GuessGame {
  2. public void go(){
  3. int number = (int) (Math.random()*10);
  4. int guess;
  5. do {
  6. print("输入数字'");
  7. guess = nextInt();
  8. } while(guess != number);
  9. println("猜中啦");
  10. }
  11. public void println(String text){
  12. print(text + "\n");
  13. }
  14. public abstract void print(String text);
  15. public abstract int nextInt();
  16. }

  1. import java.util.Scanner;
  2. public class ConsoleGame extends GuessGame {
  3. private Scanner scanner = new Scanner(System.in);
  4. @Override
  5. public void print(String text){
  6. System.out.print(text);
  7. }
  8. @Override
  9. public void println(String text){
  10. System.out.println(text);
  11. }
  12. @Override
  13. public int nextlnt() {
  14. return scanner.nextlnt();
  15. }
  16. }

  1. public class Guess {
  2. public static void main(String[] args)
  3. {
  4. GuessGame game = new ConsoleGame();
  5. game.go();
  6. }
  7. }
  8. ```
  9. ```
  10. ![](http://images2015.cnblogs.com/blog/886442/201603/886442-20160327203213308-857314392.png)
  11. ###接口与多态###
  12. - 对于定义行为,可以使用`interface`关键字定义,接口中的方法不能操作,直接标示为`abstract`,而且一定是`public`
  13. - 类要操作接口,必须使用`implements`关键字
  14. - 类可以操作两个以上的类,也就是拥有两种以上的行为。
  15. - 使用`interface`来定义抽象的行为外观,方法声明为`public abstract`,无需且不能有操作
  16. - 接口也以继承别的接口,也可以继承两个以上的接口,同样也使用`extends`关键字,这代表了继承父接口的行为
  17. - 类要操作接口,必须使用`implements`关键字
  18. ```
  19. ```
  20. public class Human implements Swimmer{
  21. private String name;
  22. public Human(String name){
  23. this.name=name;
  24. }
  25. public String getName(){
  26. return name;
  27. }
  28. @Override
  29. public void swim() {
  30. System.out.printf("人类%s游泳%n",name);
  31. }
  32. }
  33. ```
  34. ```
  35. public class Submarine implements Swimmer {
  36. private String name;
  37. public Submarine(String name) {
  38. this.name = name;
  39. }
  40. public String getName() {
  41. return name;
  42. }
  43. @Override
  44. public void swim() {
  45. System.out.printf("潜水艇%s潜行%n", name);
  46. }
  47. }
  48. ```
  49. ```
  50. public class Ocean {
  51. public static void main(String[] args) {
  52. doSwim(new Human("贾斯汀"));
  53. doSwim(new Submarine("黄色一号"));
  54. }
  55. static void doSwim(Swimmer swimmer){
  56. swimmer.swim();
  57. }
  58. }
  59. ```
  60. ![](http://images2015.cnblogs.com/blog/886442/201603/886442-20160327204956495-1867513131.png)
  61. - 多态语法的判断:判断“右边是不是拥有左边的行为”或者“右边对象是不是操作了左边接口”
  62. - 只要操作接口对象一直,都可以使用doSwim的方法,提高了系统的可维护性。
  63. - 范例如下
  64. ```
  65. public class Ocean {
  66. public static void main(String[] args) {
  67. doSwim(new Ugly("尼莫"));
  68. doSwim(new Shark("兰尼"));
  69. doSwim(new Human("贾斯汀"));
  70. doSwim(new Submarine("黄色一号"));
  71. }
  72. static void doSwim(Swimmer swimmer){
  73. swimmer.swim();
  74. }
  75. }
  76. ```
  77. - 定义Seaplane操作Swimmer与Flyer接口;类可以继承,并能操作某些接口,因此它即能飞又能又能游;
  78. ```
  79. public class Seaplane implements Swimmer,Flyer {
  80. private String name;
  81. public Seaplane(String name){
  82. this.name = name;
  83. }
  84. @Override
  85. public void fly(){
  86. System.out.printf("海上飞机 %s 在飞 %n",name);
  87. }
  88. @Override
  89. public void swim(){
  90. System.out.printf("海上飞机%s 航行海绵%n",name);
  91. }
  92. }
  93. ```
  94. - 接口可以继承自另一个接口,也就是继承父接口行为,再在子接口中额外定义行为
  95. - 接口中的方法没有操作时,必须是公开且抽象的
  96. - 枚举常数范例:
  97. ```
  98. public interface Action {
  99. public static final int STOP = 0;
  100. public static final int RIGHT = 1;
  101. public static final int LIFT = 2;
  102. public static final int UP = 3;
  103. public static final int DOWN = 4;
  104. }
  105. ```
  106. - 在枚举常数时要使用“=”指定值,否则会编译出错。
  107. - Some与Other定义的execute()
  108. - 表示不同行为,Service有两个不同的操作方法,Some与Other在名称上有所不同。
  109. - 表示相同行为,可以定义一个父接口,当定义execute()方法,而some与other继承该接口,各自定义自己的doSome()与doOther()方法。
  110. ###教材中遇到的问题和解决过程###
  111. 整个的学习过程都是抽象的过程,很多概念和注意事项读过好几遍但如果没有完全理解的话,就会十分陌生,后面也看不明白,所以一定要弄清楚每一个细节和知识点。比如这次很多程序都是有子类父类的,如果没有理解知识,就不明白为什么运行不出来或者出错,通过多次反复学习,终于有了一些理解,可能还需要日积月累的联系。
  112. ###代码托管截屏###
  113. ![](http://images2015.cnblogs.com/blog/886442/201603/886442-20160327214334886-524527187.png)
  114. ![](http://images2015.cnblogs.com/blog/886442/201603/886442-20160327214352401-1176506201.png)
  115. ![](http://images2015.cnblogs.com/blog/886442/201603/886442-20160327214410261-1506869375.png)
  116. ###学习进度条###
  117. | | 代码行数(新增/累积)| 博客量(新增/累积)|学习时间(新增/累积)|重要成长|
  118. | -------- | :----------------: |:----------------: |:---------------: |:-----: |
  119. | 目标 | 5000行 | 30篇 | 400小时 | |
  120. | 第一周 | 200/200 | 2/2 | 20/20 | |
  121. | 第二周 | 300/500 | 2/4 | 18/38 | |
  122. | 第三周 | 500/1000 | 3/7 | 22/60 | |
  123. | 第四周 | 300/1300 | 2/9 | 30/90 | |
  124. ###参考资料###
  125. - 《Java学习笔记》

20145330《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. sqlplus使用(一)

    一,sqlplus 环境变量 sqlplus的环境变量(来自SQL*Plus® User's Guide and Reference Release 11.2) Parameter or Variab ...

  2. jQuery插件treeview点击节点名称不展开、收缩节点 分类: JavaScript 2014-06-16 20:28 539人阅读 评论(0) 收藏

    修改jquery.treeview.js文件中的applyClasses方法(注释掉两行代码): 修改后的applyClasses方法如下: applyClasses: function(settin ...

  3. angularjs 权威指南 版本 1.2.6

    1 $rootScope  run  : run 方法初始化全局的数据 ,只对全局作用域起作用 如$rootScope <script src="http://apps.bdimg.c ...

  4. ASP.NET 5探险(6):升级ASP.NET 5到beta6

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:微软根据ASP.NET 5的路线图如期发布了beta6,现在我们就来说说beta5升级 ...

  5. 利用Browser Link提高前端开发的生产力

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:Browser Link是VS 2013开始引入的一个强大功能,让前端代码(比如Ang ...

  6. Unity3D打Box游戏

    先学习一些基本的脚本实现: 1.动态创建物体.默认位置是(0,0)位置 GameObject goNew = GameObject.CreatePrimitive(PrimitiveType.Cube ...

  7. 2015腾讯web前端笔试题

      1 请实现,鼠标点击页面中的任意标签,alert该标签的名称.(注意兼容性) 2 请指出一下代码的性能问题,并经行优化. var info="腾讯拍拍网(www.paipai.com)是 ...

  8. Blog Starting...

    30出头,开始Blog记录学习生活的点滴,待40时再回来一看.

  9. 分享一个漂亮WPF界面框架创作过程及其源码(转)

    本文会作为一个系列,分为以下部分来介绍: (1)见识一下这个界面框架: (2)界面框架如何进行开发: (3)辅助开发支持:Demo.模板.VsPackage制作. 框架源码如下所示. 本文介绍第(1) ...

  10. OAuth2.0 在 SSO中的应用~

    关于OAuth2.0的介绍,请看下面链接(讲的挺好的): http://blog.csdn.net/seccloud/article/details/8192707 我的理解: 一共四个角色,A:Cl ...