20145319 第四周学习总结

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

教材学习内容总结

本周学习了教材的第六章、第七章,这两章所讲代码设计都是以一个项目为基础的,所以着重讲了代码继承,多态操作以及接口语法。

1. 继承

  1. 定义:面向对象中,涉及对象过多时容易出现重复行为,为了避免这种情况,就可把重复的部分写成父类,由子类来继承父类。

  2. 关键字:

  • extends:子类继承父类时要使用extends,如public class子类 extends 父类,表示新建的类会扩充原有的类的行为。

  • protected:与private功能相似,但是在实际操作中,父类定义private成员无法在子类中存取,较为不方便,此时就可以改将其声明为protected,即可以在相同包中的类直接存取,继承的子类也可以直接存取。

  • final:用于class前,表示此类不会有子类,无法被继承。

  • Override:在继承父类之后,定义与父类中相同的方法部署,但执行内容不同,这称为重新定义,在代码中加上@Override可用来检查该方法是否真的重新定义了父类中的某个方法,防止打错字,否则就会发生错误。

     3.   重新定义的细节:如果想取得父类中的方法定义,可以在调用方法前加上super关键字,重新定义父类中的方法在子类中权限只能扩大不能缩小,返回类型是父类中方法返回类型的子类

     4.   多态is-a:

  • 子类只能继承一个父类,并且子类与父类之间有一种is-a的关系,子类 is a 父类,在编写代码时:父类=new 子类,让不是一种的类扮演另一种类需要加上类似于 强制类型转换的语法,如SwordsMan swordsman=(SwordsMan) role1。

  • 使用单一接口操作多种类型的对象就是多态,个人的理解就是用一种父类来控制许多的子类。

2. 抽象方法、抽象类

  1. 定义:如果某个方法区块中真的没有任何程序代码操作,可以定义为抽象类,定义不完整的类就不能用来生成实例,(ps:内含抽象方法的类也一定要定义为不完整的抽象类,在工作中如果还有些方面没有确定,就可以调用抽象方法,等到平台确定后,再对代码进行符合这个平台的完善操作)
  2. abstract:抽象类以及方法需要用abstract标示该方法,如public abstract void fight

     3.  java.lang.object:任何类的最上层父类一定就是java.lang.object,因此Object数组可以来收集各种类型的对象。

     4.  instanceof:左操作数为对象,右操作数是类,可以用来判断对象是否由某个类创建

3. 接口

  1. 使用interace关键字定义,类要操作接口,必须使用implements关键字,对接口中定义的方法有两种操作方式,一是操作接口中定义的方法,二是再度将该方法表示为abstract。操作接口表示“拥有行为”,不再是“是一种”的关系。

  2. 行为的多态:与继承类似,也可以让一个对象强行扮演某种行为。

  3. 接口语法细节: 接口中的方法没有操作时,一定得是公开并且抽象。
    在interface接口中常常可以定义枚举常数(例:public static final int),实际上,在interface接口中也只能定义public static final的枚举常数,并且一定要使用=指定值,否则就会编译错误。个人感觉枚举常数在表达意思上更清楚一些,便于程序员读懂程序。接口也可以继承接口。

4. 其他

  1. 匿名内部类:主要是在临时继承某个类或操作某个接口并建立实例的需求(例:Some some=new Some(){};
  2. enum枚举常数:public enum Action{},实际上enum定义了特殊的类,enum中的元素也就是枚举常数。

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

  • 随着学习难度的增大,很多问题并非看书看一遍就能弄懂,例如讲父类子类运行先后时,以及super使用时,看第一遍并不能理解,所以只能通过实际操作对比书上结果来理解(后附代码以及运行结果)还有很多课后题,第一次并不能弄明白,要对比书上的知识点和代码在电脑上实际的运行结果来看才能慢慢弄懂。
  • 在编RPG时写drawFight,自己写成public void drawFight();可以定义,但是上面的drawFight(Role);语句就会编译无法通过,要改成static void drawFight();

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

1.  代码一:


运行结果

代码一(改):

运行结果:


2. 代码二:




这里在运行时以为return返回值即可直接输出,最后导致程序无结果,加上System.out.printf("%s",yasuo.toString());即可。

代码托管截图:

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

  • 这两章的学习都是以项目为单位的,所以不同于以前编程都是一个程序为单位,在之后更多的还要考虑程序的简洁、可维护性、弹性。之后在编写程序时要适当改变以往的思维,多考虑这方面的问题。

学习进度条

代码行数(新增/累积)

博客量(新增/累积)

学习时间(新增/累积)

重要成长

目标

3500行

28篇

300小时

第一周

150/150

1/1

20/20

第二周

200/350

1/2

20/40

第三周

300/650

1/3

20/60

第四周

350/1000

1/4

25/85

 

参考资料

- ...

原文地址:https://www.cnblogs.com/20145319zk/p/5326358.html