20145129 《Java程序设计》第4周学习总结
教材学习内容总结
- 继承与多肽
- 继承共同行为
- 继承是避免多个类间重复定义共同行为。(将相同的代码提升为父类)
- 关键字extends:表示这个类扩充另一个类的行为即继承。
- 优点:维护时只需修改父类,继承父类的子类无需修改。
- 多态与is-a
- is-a: Java中子类只能继承一个父类,因为子类与父类之间会有“is-a”的关系,中文“是一种”。
- 运用“是一种”来判断编译是否失败以及将扮演(Cast)看做叫程序闭嘴的语法。
- 并留意参考的对象实际类型,判断何时扮演成功,何时会抛出“ClassCastException”(失败)。
- 多态: 使用单一接口(指对象上可操作方法)操作多种类型的对象。
- 重新定义行为
- 在继承父类之后,定义与父类中相同的方法部署,但执行内容不同。
- 标注@Override:表示要求编译程序检查该方法是否真的重新定义了父类中某个方法,如果不是就会引发编译错误。
- 若想取得父类中的方法定义,可在调用方法前加super关键字,不能定义为private。
- 对于父类中的方法权限,只能扩大但不能缩小。
- 重新定义方法时除了可以定义权限较大的关键字外,其他部分必须与父类中方法签署完全一致。
- 重新定义方法时,如果返回类型是父类中方法返回类型的子类,也是可以通过编译的。
- 抽象方法、抽象类
- abstract抽象方法:Java中规定内含抽象方法的类,一定要在class前标示abstract来表示这是一个定义不完整的抽象类。(若某方法区块中真的没有任何程序代码操作可采用此方法)
- 用抽象类创建实例,就会引发编译错误。
- 子类如果继承抽象类,对于抽象方法有两种做法:一、继续标示该方法为abstract;二、操作抽象方法。
- 继承共同行为
- 继承语法细节
- protected成员
- 在不同包类只让子类可以直接存取。
- Java中实际上有4个权限范围,除了前面学到的,其中没有定义关键字的默认就是包范围即当在不同包类不可存取。
- 重新定义的细节(参考上文)
- 构造函数
- 构造函数可以重载,父类中可以重载多个构造函数,如果子类构造函数中没有指定执行父类中哪个构造函数,默认调用父类中无参数构造函数。
- 若定义了有参数的构造函数,可以加入无参数构造函数,即使内容为空也无所谓,增加使用弹性。
- final关键字
- 在指定变量值之后,不想再改变变量值,可在声明变量时加上final限定,若日后修改了final变量会出现编译错误。
- 若对象数据成员被声明为final,但没有明确使用=指定值,那表示延迟对象成员的指定,在构造函数执行流程中,一定要有对该数据成员指定值的动作,否则编译错误。
- class前使用final关键字定义,表示这个类是最后一个,不会有子类,也就是不会被继承。
- 定义方法时也可以限定该方法为final,表示这是最后一次定义方法,子类不可以重新定义final方法。
- java.lang.Object
- 若定义类时没有使用extends关键字指定继承任何类,那一定是继承java.lang.Object。
- java.lang.Object是所有类的顶层父类。
- (??对定义ArrayList类那部分有些模糊。)
- 重新定义 toString()
- 重新定义equals()
- 关于垃圾收集
- 对于不再有用的对象,JVM有垃圾收集机制,收集到的垃圾对象所占据的内存空间,会被垃圾收集器释放。
- protected成员
- 接口与多态
- 接口定义行为
- Java中可以使用interface关键字定义行为。
- 接口可以用于定义行为但不定义操作。
- 类要操作接口,必须使用implements关键字。操作某接口时,对接口定义的方法有两种方式:一、操作接口中定义的方法;二、将该方法标示为abstract。
- 操作接口表示“拥有行为”。
- 行为的多态
- 与上文中提到的多态类似。只不过在判断中把“是一种”换做“拥有...行为”。
- 解决需求变化
- 类可以操作两个以上的类,也就是拥有两种以上的行为。
- 类可以同时继承某个类,并操作某些接口。
- 写程序需要保证程序的弹性。
- 接口定义行为
- 接口语法细节
- 接口的默认
- 接口中的方法没有操作时,一定得是公开且抽象,可以省略“public abstract”此时编译程序会自动加上,并默认是public。
- 匿名内部类
- 在有临时继承某个类或操作某个接口并建立实例的需求,由于这类子类或接口操作类只能使用一次,不需要为这些类定义名称,此时可以使用匿名内部类。
- 使用enum枚举常数
- 使用enum枚举常数,实际上enum定义了特殊的类,继承自java.lang.Enum,这是由编译程序处理,直接撰写程序继承Enum类会被编译程序拒绝。
- enum实际上定义了类,而enum中列举的常数,实际上是"public static final",且为枚举类型实例,无法撰写程序直接实例化枚举类型,因为构造函数权限设定为private,只有类中才可以实例化。
- 接口的默认
教材学习中的问题和解决过程
在对第六章学习中对定义ArrayList类那部分有些模糊,具体还在请教同学。
代码调试中的问题和解决过程
编写代码过程中并没出现太大问题。(下图为代码托管截图)
其他(感悟、思考等,可选)
对书中所讲代码进行实际操作后发现,不是所有代码都要写一遍...总是在写完一段代码后看书发现这段代码并没有太大的意义,而真正需要动手操作的部分还在后面,这样效率一下低了很多。 对于本周学习我基本上把80%的课余时间用在了学习Java上不仅仅是看书还有看视频还有上网了解书上内容然而这两章虽然页数没有前几章多但是信息量非常庞大需要联系前两章内容,在这周结束时我也并不能完全消化它。表示我尽力了。
学习进度条
| | 代码行数(新增/累积)| 博客量(新增/累积)|学习时间(新增/累积)|重要成长|
| -------- | :----------------:|:----------------:|:---------------: |:-----:|
| 目标 | 3000行 | 15篇 | 300小时 | |
| 第一周 | 50/50 | 2/2 | 14/14 |
| 第二周 | 100/150 | 1/3 | 10/24 |
| 第三周 | 300/450 | 1/4 | 15/39 |
| 第四周 | 350/800 | 1/4 | 50/74 |