20145302张薇《Java程序设计》第四周学习总结

时间:2024-01-13 15:17:56

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

教材学习内容总结

第六章

  • 继承共同行为
  1. 面向对象中,子类继承父类,避免重复的行为定义,不过并非为了避免重复定义行为就使用继承。
  2. 程序代码重复在程序设计上就是不好的信号,多个类间出现重复的程序代码时,设计上可考虑的改进方式之一,就是把相同的程序代码提升为父类。
  3. 在java中,继承时使用extends关键字,private成员也会被继承,只不过子类无法直接存取,必须通过父类提供的方法来存取(若父类愿意提供访问方法的话)。
  • 多态与is-a
  1. 在java中,子类只能继承一个父类,并且子类与父类之间有一种is-a的关系。
  2. 多态,抽象的说,就是使用单一接口操作多种类型的对象。
  • 重新定义行为在继承父类之后,定义与父类中相同的方法部署,但执行内容不同,这称为重新定义(Override)。在重新定义父类中某个方法的时候,子类必须撰写与父类方法中相同的签署。
  • 抽象方法、抽象类如果某个方法区块中真的没有任何程序代码操作,可以使用abstract标示该方法public abstract void fight,定义不完整的类就不能用来生成实例,内含抽象方法的类也一定要定义为不完整的抽象类,子类继承抽象类,对于抽象方法,一种是继续标示其为抽象类,另一种就是操作抽象方法。
  • protected成员java中有publicprotectedprivate三个权限关键字,但实际上有四个权限范围。
  • 重新定义的细节
  1. 如果想取得父类中的方法定义,可以在调用方法前,加上super关键字。
  2. 重新定义方法要注意,对于父类中的方法权限,只能扩大不能缩小。
  3. 在JDK5后,重新定义方法时,如果返回类型是父类中方法返回类型的子类,也可以通过编译。
  • 再看构造函数在创建子类实例后,会先进行父类定义的初始流程,在进行子类定义的初始流程,如果子类构造父类函数中没有指定执行父类中哪个构造函数,默认会调用父类中无参数构造函数如果父类中定义了构造函数,子类构造函数时就要注意调用父类中的哪个函数。
  • 再看final关键字
  1. 如果class前使用了final关键字定义,那么表示这个类是最后一个了,不会再有子类,也就是不能被继承。
  2. 定义方法时,也可以限定该方法为final,这表示最后一次定义方法了,也就是子类不可以重新定义final方法。
  • java.lang.object
  1. 如果定义类时没有使用extends关键字指定继承任何类,那一定是继承java.lang,Object
  2. 在java中,任何类追溯至最上层父类,一定就是java.lang.Objet
  • 垃圾收集
  1. 对于不再有用的对象,JVM有垃圾收集机制,收集到的垃圾对象所占据的内存空间,会被垃圾收集器释放。
  2. 在执行过程中,无法通过变量参考的对象,就是GC认定的垃圾对象。
  • 再看抽象类在不确定执行环境的时候,可以先创建出ConsoleGame实例,执行go()方法过程中调用到print()nextInt()println()等方法时,都是执行ConsoleGame中定义的流程。

第七章

  • 接口定义行为
  1. 对于定义行为,可以使用interace关键字定义,接口中的方法不能操作,直接标示为abstract,而且一定是public
  2. 操作某接口时,对接口中定义的方法有两种操作方式,一是操作接口中定义的方法,二是再度将该方法表示为abstract
  3. 继承会有“是一种”关系,而操作接口表示“拥有行为”。
  • 行为的多态与继承相同,也可以让一个对象强行扮演(cast)某种行为,与多态相同,只要是操作同一个接口的类都可以拥有接口的行为,可维护型也同时得到了较大的提高。
  • 解决需求变化在java中类可以操作两个以上的类,可以同时继承某个类并操作某些接口;于此同时,java中接口可以继承自另一个接口,也就是继承父接口行为,再在子接口中额外定义行为。
  • 接口的默认可以使用接口枚举常数,只能定义为public static final,如果有两个接口都定义了方法,操作的两个接口的类并不会有错误,照样会通过编译,所以要在设计时注意一下。
  • 使用enum枚举常数enum实际上定义了类,而enum中列举的常数,实际上是public static final,而且为枚举类型实例,无法撰写程序直接实例化枚举类型,因为构造函数权限设定为private,只有类中才可以实例化。

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

  • 这两章的联系比较紧密,一定得把前方的知识都搞懂了,循序渐进才能一步步的将代码看懂,这就很尴尬了,函数各种调用,在学习状态不好,精神疲惫的时候是无法参透代码的含义的,子类,父类,继承,接口,多态,枚举常数等含义都要反复的看,否则不好理解。

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

  • 问题在模仿Game游戏代码时,我将Game中的游戏代码都放到了一个包里,给“Role”、“RPG”等命名时加上了数字编号,结果发现fight()无法使用。
  • 解决过程我发现,随着类名称的改变,自己在模仿书上的代码的同时应该注意相对应的修改一些代码,才可以正确的调用函数。而且改变了文件的包的位置的时候,注意修改import偷懒的那个包的地址,包的嵌套中间用.隔开。

本周代码托管截图

20145302张薇《Java程序设计》第四周学习总结

20145302张薇《Java程序设计》第四周学习总结

其他(感悟、思考等,可选)

  • 这周的学习任务很繁重,而且更加抽象了,而且函数各种调用,不太容易看懂,必须得细心。
  • 我发现,都到第七章了,良葛格的好多注释还是“无聊的语法示范”,说明现在还在学习很基础的知识,为了之后较熟练的应用java,我们应该扎实基础,一周两章感觉不太能消化完。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 1500行 15篇 400小时
第一周 10/10 2/2 10/10 基础知识
第二周 100/100 3/3 35/35 语法知识
第三周 300/300 4/4 60/60 了解对象

参考资料