20145325张梓靖 《Java程序设计》第4周学习总结
20145325张梓靖 《Java程序设计》第4周学习总结
教材学习内容总结
-
何谓继承
- 继承共同行为 继承基本上就是避免多个类间重复定义共同行为;可把相同的程序代码提升为父类;用关键字
extends
来继承父类(private
成员会被继承,只不过子类无法直接存取,必须通过父类提供的方法来存取) - 多态与 is-a 在java中,子类只能继承一个父类;检查语法的逻辑是否正确,方式是从=号右边往左读:右边是不是一种左边呢;例:
Role role1 = new SwordsMan(); SwordsMan swordsMan = role1;
对于第一行,
SwordsMan
是一种Role
,所以编译通过;对于第二行,Role
不一定是一种SwordsMan
,因为还有可能是一种Magician
。可使用扮演(Csat),让代码通过编译;例:
Role role2 = new Magician(); SwordsMan swordsMan = (SwordsMan) role2;
代码可以编译成功,但由于实际上,role2 参考的是 Magician,而你却要让魔法师假扮为剑士,这在执行上会是个错误。
- 重新定义行为 重新定义,即为在继承父类之后,定义与父类中完全相同的方法部署,但执行内容不同;可在重新定义方法的前面加上 “@Override” ,表示要求编译程序检查,该方法是不是真的重新定义了父类中某个方法。
- 抽象方法、抽象类 如果某方法区块中真没有任何程序代码操作,可以使用
abstract
标示该方法为抽象方法,该方法不用撰写 {} 区块,直接 “; ”结束即可;如果某个类中,有方法定义为了abstract
型,则必须在此类的 class 前标示abstract
。
- 继承共同行为 继承基本上就是避免多个类间重复定义共同行为;可把相同的程序代码提升为父类;用关键字
-
继承语法细节
- protected 被声明为
protected
的成员,相同包中的类可以直接存取,不同包中的类可以在继承后的子类直接存取;Java中,有3个权限关键字,但实际上有4个权限范围,因为没有定义权限关键字,默认就是包范围。 - 重新定义的细节 要注意,对于父类中的方法权限,只能扩大但不能缩小(即若原来成员为 public,则子类中重新定义时不可为 private 或 protected);在 Java中,如果想取得父类中的方法定义。可以在调用方法前,加上
super
关键字; static 方法属于类拥有,如果子类中定义了相同签署的 static 成员,该成员属于子类所有,而非重新定义, static 方法也没有多态。 - 再看构造函数 在创建子类实例后,会先执行父类构造函数定义的流程,再执行子类构造函数定义的流程;如果子类构造函数中没有指定执行父类中那个构造函数,默认会调用父类中无参数构造函数;可使用 super() 来指定执行父类中的某构造函数。
- 再看 final 关键字 class 前使用了 final ,那么久表示这个类是最后一个了,不会再有子类,也就是不能被继承;定义方法时,也可限定该方法为 final ,这表示最后一次定义方法了,也就是子类不可以重新定义 final 方法。
- java.lang.Object 在Java 中,子类只能继承一个父类,如果定义类时没有使用 extends 指定继承任何类,那一定是继承
java.lang.Object
,任何类追溯至最上层父类,一定是java.lang.Object
,也就是 Java 中,所有对象,一定“是一种” Object ,都可以使用 Object 声明的名称来参考;可使用 Object[] 来收集各种对象; toString() 与 equals() 都是 Object 类定义的方法。 - 关于垃圾收集 JVM 有垃圾收集(GC)机制,执行流程(目前我们只接触过 main()程序进入点开始之后的主流程)中,无法通过变量参考的对象(就是没有牌子的对象),就是 GC 认定的垃圾对象。
- protected 被声明为
-
接口
使用 interface 定义接口,使用 implements 操作接口。 编写接口时,里面的方法都是抽象方法,必须是 `public abstract`,当然也可省略不写,编译程序会自动补充,对于接口,可以定义枚举常数(一定要用 “=” 指定值),必须是 `public static final`,当然也可以省略,编译程序也会自动补充(类中也可以定义枚举常数,不过来要写明 `public static final`)。 一个类,可以操作多个接口,也可以同时继承某个类,并操作某些接口;接口可以继承另一个接口,也就是继承父类接口行为。 对接口中定义的方法有2种处理方法,一是操作接口中定义的方法,二是再度将方法标示为 abstract 。 以Java语意来说,继承为“是一种”关系,操作接口为“拥有行为”。
-
多态
如果一个类中定义了一个方法,这个方法的参量为某个接口时,只要是操作这个接口的对象,都可以使用这个方法
-
匿名内部类
在Java中,经常会有临时继承某个类或操作某个接口并建立实例的需求,由于这类子类或接口操作类只使用一次,不需要为这些类定义名称,这时就可以使用匿名内部类来解决这个需求。 ``` new 父类()|接口(){ //类本体操作 } ```
-
enum
enum定义了特殊的类,继承自 `java.lang.Enum` ,不过这是由编译程序处理,直接撰写程序继承 Enum 类会被编译程序拒绝。 ``` public enum Action{ STOP,RIGHT,LEFT,UP,DOWN } ```
教材学习中的问题和解决过程
- 问题 匿名内部类定义的方式?
- 解决过程
1.首先验证基本程序的正确性:
正确
2.当匿名内部类只重新定义方法,对枚举常数没有操作时:
可以
3.当匿名内部类重新定义方法,对枚举常数照接口写入:
可以
4.当匿名内部类重新定义方法,并新定义了另外的枚举常数时:
不可以
5.同理,当匿名内部类重新定义方法,并新定义了方法时:
不可以
6.当匿名内部类重新定义方法时,没有定义完接口中的:
不可以
代码调试中的问题和解决过程
调试中,书上章节关于匿名内部类的,还存在一些疑惑,等弄明白后,会再详细叙述的。
代码托管
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 3500行 | 28篇 | 300小时 | |
第一周 | 150/150 | 1/1 | 20/20 | |
第二周 | 100/250 | 1/2 | 22/42 | |
第三周 | 150/400 | 2/4 | 21/63 | |
第四周 | 1000/1400 | 1/5 | 27/90 |