Java已经丢手一年了,很遗憾。今年想转Android,所以想把Java再捡起来,首先想到的就是这本TIJ了。话说当年还买过纸质第三版的,拿在手上真的有种砖头的感觉,呵呵。现在习惯了看电子版了,方便,而且公司和家里都能很好的同步阅读,做笔记也比较方便点。
进度——41/913。
第一章,对象导论。
看到现在,整理一下几个比较重要的知识点。
组合:使用现有类组合新类,聚合:动态发生的组合,通常视为has-a关系,比如汽车拥有引擎。
组合中新类的成员对象通常声明为private,可以有极大的灵活性。
要注意区分使用组合和继承的场合。
继承:当创建了一个类后,另一个类与其具有相似的功能,但又不完全相同,可以使用继承。继承需要注意的是,当父类改变时,子类也会跟着改变。继承用关键字extends。子类也不可以使用父类的private变量和方法。
继承最经典的例子:几何形是父类,圆形、长方形、三角形是子类。
替代原则:一个子类可以完全替代父类,称为is-a关系(纯粹替代)。子类添加了新的变量或者方法,称为is-like-a关系。判断是否继承关系,就是要确定是否可以用is-a来描述类之间的关系,并使之具有实际意义。
继承的重要体现:overload,overriding。
重载(Overload):每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。只能重载构造函数
规则:1.被重载的方法必须改变参数列表;2.被重载的方法可以改变返回类型;3.被重载的方法可以改变访问修饰符;4.被重载的方法可以声明新的或更广的检查异常;5.方法能够在同一个类中或者在一个子类中被重载。
重写(Override):(注意::覆盖是子类对父类的接口abstract方法进行重新定义)能够在需要新的子类特有行为时重新在子类中定义方法。
规则:1.参数列表必须完全与被重写方法的相同;2.返回类型必须完全与被重写方法的返回类型相同;3.访问级别的限制性一定不能比被重写方法的强;4.访问级别的限制性可以比被重写方法的弱;5.重写方法一定不能抛出新的检查异常或比被重写的方法声明的检查异常更广泛的检查异常。6.重写的方法能够抛出更少或更有限的异常(也就是说,被重写的方法声明了异常,但重写的方法可以什么也不声明)。7.不能重写被标示为final的方法;8.如果不能继承一个方法,则不能重写这个方法。
区别:
区别点 重载方法 重写方法
参数列表 必须修改 一定不能修改
返回类型 可以修改 一定不能修改
异常 可以修改 可以减少或删除,一定不能抛出新的或者更广的异常
访问 可以修改 一定不能做更高的限制(可以降低限制)
调用:
重载方法:
参数类型决定选择哪个重载版本(根据声明的参数类型),这发生在编译时。被调用的实际方法仍是发生在运行时期的虚拟方法调用。但是编译器已经知道所调用的方法的签名。因此,在运行时期,参数匹配已经明确,只是还不知道该方法所在的实际类。
重写方法:
对象类型(即:堆上实际实例的类型决定调用选择哪个方法,这发生在运行时期)