HIT软件构造学习笔记-第三章(下)

3.4面向对象的编程
一.一些基本概念
1.静态成员和实例成员

2.接口:
接口是用来确定ADT规约的,所以接口中只能有供用户使用的方法,不能存在构造函数

(1)接口之间可以继承和扩展

(2)一个类可以实现多个接口

(3)一个接口可以有多个实现类

*另外要注意,接口的返回值也是虚拟的,不能存在具体实现,此处有考点:改接口的代码

3.继承和重写:
(1)严格继承:
所有的子类只能添加新的方法,不能对原有父类的方法进行重写
(注意:final类型的不能被继承和重写)

(2)重写:
就是对父类的方法进行改进,但是注意重写不能改变方法的本意

在实际执行的时候,到底执行子类的方法还是父类的方法要看数据的类型,执行相同类型的那个方法

(3)子类和父类的方法分:
这里直接举一个例子:那种多数子类中都需要用到的方法就直接放在父类中就好了

4.多态:
多态的分类:
(1)特殊多态(重载–overloading):
就是用一个方法名实现不同的方法
要求:参数类型必须是不同的,其他的都随意

*重载(overloading)和重写(overriding)是不一样的:
重写必须保证:
a.修改后必须有比父类还强的实现
b.参数类型和返回值都不能改变

考点:判断overloading和overriding是否合法
(注意:interface类型不能被实例化)

(2)参数化多态(泛型):
在运行过程中,根据不同的实现,给类赋不同的值(用< >表示)

(3)子类型:
表示有层次的类型网络(也就是子类和父类的关系)

3.5ADT和OOP中的等价性
一.等价性
等价关系:自反性,传递性,对称性

二.immutable类型的对象判断等价性
1.从AF的角度:
if f(a) = f(b) 则a和b等价(AF映射到相同的结果)

2.用obsrevation判定(方法返回的结果)
在用户的角度,对两个对象调用任何相同的操作,都会得到相同的结果,则可认为两个对象等价

考点:两种方法可能会出现不同的判断结果

3.== 和 equals()方法
(1)双等号:
利用等价性,如果两个引用指向同一个对象才判定为相等
*非常严格的判定,基本只用于基本数据类型

(2)object类中为我们提供了equals()方法
我们可以通过重写(overriding)equals()方法实现我们自主判定等价性

(3)判断equals()方法是否合理的一些条件:
a.是否满足等价关系
b.除非对象被修改,否则多次调用equals()方法应该为同样的结果(不能一天一个样)
c.“相等”的对象,hashcode()的值必须一样
d.不能和“空”判定相等

(4)hashcode()
注意:
a.所有对象可以使用同一hash值,但是会影响效率
b.等价的对象必须有相同的hash值
c.重写equals()方法的时候也要保证hashcode()的值必须一样

三.mutable类型的对象判断等价性

因为mutable的可变性,我们一般都用行为等价性判断(也就是类似于双等号)
反之,判断immutable的时候我们偏向于观察等价性(也就是重写overriding)

*clone()方法:
x.clone() != x;
x.clone().getclass() == getclass();
x.clone().equals(x);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值