软件构造复习(四)

目录

前言

一、OOP的相关知识

二、关于不可变类型和可变类型的等价性

总结

前言

继续复习软件构造

一、OOP的相关知识

接口:java中一类特定方法的总称。接口可以被多个类实现,一个接口也可以有多个实现类。接口中没有构造器、fields以及方法的实体。

接口中的方法:只有public、abstract、default、static、strictfp是允许的,private方法是不被允许的:

通过default关键字定义接口中方法,在接口中统一实现某些功能,无需在各个类中重复实现它。

关键字的作用域

  • private:只能在声明的类中使用
  • protected:可以在声明类中的子类或者同一个包的其他类中使用
  • public:可以在任何地方被引用

某个类的构造器中的成员变量初始化如果想继承父类,必须最先声明!

抽象方法:只有方法的声明,没有方法的具体实现,被关键字abstract修饰

抽象类:含有至少一个抽象方法的类叫做抽象类

接口(新定义):所有的方法都是抽象方法的抽象类

接口和抽象类的区别:

多态的三种形式:

  • 特殊多态:功能重载
  • 参数化多态:泛型化编程
  • 子类型多态

signature:函数签名,包含函数的返回值、名称和参数类型列表,用来确定一个函数(方法)的

泛型:允许多种不同的属性的实例化

<?super A>:下限通配符

<? extends A> 上限通配符

子类型:B是A的子类型当且仅当B的规约不弱于A的规约

若对每个类型S的对象o1,都存在一个类型T的对象o2,使得在所有针对T编写的程序P中 ,用o1替换o2后,程序P行为功能不变,则S是T的子类型。

instanceof:Operator判断这个object是否是给定的类,左边是对象,右边是类

二、关于不可变类型和可变类型的等价性

关系等价性:

x.equals(x)  //自反
x.equals(y) <--> y.equals(x) //对称
x.equals(y),y.equals(z) -->x.equals(z) //对称 

Imutable的等价性:

  • 通过抽象函数AF的值来判断,a和b相等当且仅当a和b在函数f的作用下有相同的值
  • a和b相等当且仅当经过相同的操作后a和b仍然相等

不可变类型需要重写equals/hashcode方法(必须同时继承)

对于基本数据类型判定相等: “==”

对于对象类型判断相等:  equals()

注:如果对两个对象判定相等使用了“==”,这里判断的是两个对象的引用地址是否相同

contains方法的原型为:contains(Object o)

mutable的等价性:

  • 观察等价性:在不改变状态的情况下,两个mutable对象是否看起来相等。如Collections、Date
  • 行为等价性:调用对象的任何方法是否展示出一致的结果。如StringBuilder

注:有些情况下,观察等价性可能会导致bug,甚至破坏RI

可变类型通常不需要重写equals/hashcode方法

x.clone()!=x 、x.clone.getclass() == x.getclass()、x.clone().equals(x)

两个equal方法判断相等的对象hashcode值一定相同,反之未必

对于任意的非空对象x,x.equals(null)会返回false

Interger x = new Interger(3);
Interger x = new Interger(3);
 x==y   //false
 x.equals(y) //true
(int)x == (int) y //true
Interger x = 3;
Interger y = 3;
x==y //true
x.equals(y) //true

总结

本次简要复习了OOP以及相等行为的有关知识

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值