ADT
{
s
p
e
c
:
注
释
,
类
名
R
e
p
r
e
s
e
n
t
a
t
i
o
n
:
具
体
的
存
储
数
据
,
成
员
变
量
I
m
p
l
e
m
e
n
t
a
t
i
o
n
:
方
法
实
现
体
\left\{ \begin{array}{c} spec:注释,类名 \\ Representation:具体的存储数据,成员变量 \\ Implementation:方法实现体\end{array}\right.
⎩⎨⎧spec:注释,类名Representation:具体的存储数据,成员变量Implementation:方法实现体
不变量(Invariants):任何时刻变量都要符合的要求
表示泄露→用private,final
接口(interface):只定义方法与spec
RI与AF
AF(Abstraction Function):映射:R(表示空间)→A(抽象空间)
- 满射
- 不一定单射
- R中的非法值没有映射
RI:映射:R→boolean(R中的表示是否合法)
Rep invartiant:条件
注释:RI+AF+Safety from rep exposure
OOP
接口与类
一个接口可以有多个实现类,一个类可以实现多个接口
静态工厂方法:default方法:在接口中写实现体
接口中不能声明实现体:ArrayList × —— List √
{
扩
展
:
接
口
e
x
t
e
n
d
s
接
口
实
现
:
类
i
m
p
l
e
m
e
n
t
s
接
口
继
承
:
子
类
e
x
t
e
n
d
s
父
类
\left\{ \begin{array}{c} 扩展:接口 extends 接口 \\ 实现:类 implements 接口 \\ 继承:子类 extends 父类\end{array}\right.
⎩⎨⎧扩展:接口extends接口实现:类implements接口继承:子类extends父类
父类中没有用final修饰的可以重写:@overide;复用:super()
抽象类(abstract class):至少一种方法是抽象的,没有被实现的
多态
{
重
载
(
o
v
e
r
l
o
a
d
)
:
同
一
个
函
数
名
,
参
数
一
定
不
同
,
返
回
值
可
以
不
同
泛
型
:
p
u
b
l
i
c
c
l
a
s
s
<
E
>
;
也
可
以
用
<
?
>
:
L
i
s
t
<
?
e
x
t
e
n
d
s
接
口
>
子
类
型
多
态
:
继
承
树
,
处
理
顶
层
即
可
\left\{ \begin{array}{c} 重载(overload):同一个函数名,参数一定不同,返回值可以不同 \\ 泛型:public class<E>;也可以用<?>: List<? extends 接口>\\ 子类型多态:继承树,处理顶层即可\end{array}\right.
⎩⎨⎧重载(overload):同一个函数名,参数一定不同,返回值可以不同泛型:publicclass<E>;也可以用<?>:List<?extends接口>子类型多态:继承树,处理顶层即可
Object:equals,hashCode,toString
等价性
等价性:是基于AF的,要求的方法返回值相同
{
引
用
等
价
性
(
=
=
)
:
对
基
本
类
型
(
对
对
象
类
型
比
较
的
是
I
D
)
对
象
等
价
性
(
e
q
u
a
l
s
)
:
对
对
象
类
型
\left\{ \begin{array}{c} 引用等价性(==):对基本类型 (对对象类型比较的是ID)\\ 对象等价性(equals):对对象类型\end{array}\right.
{引用等价性(==):对基本类型(对对象类型比较的是ID)对象等价性(equals):对对象类型
{
e
q
u
a
l
s
(
)
:
比
较
等
价
性
,
不
能
对
数
据
修
改
,
与
n
u
l
l
比
较
返
回
n
u
l
l
,
与
h
a
s
h
C
o
d
e
(
)
成
对
出
现
h
a
s
h
C
o
d
e
(
)
:
查
询
的
时
候
用
,
相
同
的
h
a
s
h
C
o
d
e
一
样
即
可
,
不
一
样
的
也
可
以
相
同
\left\{ \begin{array}{c} equals():比较等价性,不能对数据修改,与null比较返回null,与hashCode()成对出现\\ hashCode():查询的时候用,相同的hashCode一样即可,不一样的也可以相同\end{array}\right.
{equals():比较等价性,不能对数据修改,与null比较返回null,与hashCode()成对出现hashCode():查询的时候用,相同的hashCode一样即可,不一样的也可以相同
equals()=true → hashCode()相同,反之则不行
{
观
察
等
价
性
:
o
b
s
e
r
v
e
r
的
值
相
同
行
为
等
价
性
:
o
b
s
e
r
v
e
r
+
m
u
a
t
o
r
都
一
样
\left\{ \begin{array}{c} 观察等价性:observer的值相同\\ 行为等价性:observer+muator都一样\end{array}\right.
{观察等价性:observer的值相同行为等价性:observer+muator都一样
{
观
察
等
价
性
:
o
b
s
e
r
v
e
r
的
值
相
同
行
为
等
价
性
:
o
b
s
e
r
v
e
r
+
m
u
a
t
o
r
都
一
样
\left\{ \begin{array}{c} 观察等价性:observer的值相同\\ 行为等价性:observer+muator都一样\end{array}\right.
{观察等价性:observer的值相同行为等价性:observer+muator都一样
{
i
m
m
u
t
a
b
l
e
:
一
定
要
重
写
e
q
u
a
l
s
+
h
a
s
h
C
o
d
e
m
u
t
a
b
l
e
:
不
是
必
须
的
\left\{ \begin{array}{c} immutable:一定要重写equals+hashCode\\ mutable:不是必须的\end{array}\right.
{immutable:一定要重写equals+hashCodemutable:不是必须的