软件构造第7、8讲提纲

第七章 OOP

1.基本概念:对象,类,方法

(1)对象(状态和行为的复合体)

状态:fields

行为:method

(2)类:一组对象(抽象)

(3)类方法 类成员变量(staic)

(4)实例方法 实例成员变量

2.接口和枚举

(1)接口中只有方法的定义,没有实现

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

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

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

(5)接口:确定ADT规约 类:实现ADT

(6)接口里面没有构造函数,client需要知道该接口某个具体实现类的名字

(7)java8开始,通过在接口内写static函数,构造函数,避免表示泄露

(8)default方法:在接口中统一实现某些功能,避免重复

3.封装和信息隐藏

(1)通过接口实现信息隐藏

客户端仅使用接口中定义的方法

(2)public,protected,default,private

Public:所有

Protected:当前类,子孙类

Default:当前类,同一包的子孙类

Private:当前类

4.继承和重写

(1)子类继承父类的属性和方法

(2)严格继承:子类只能添加新方法,无法重写超类中的方法

父类中方法前加final 子类无法重写

(3)类前final 不能派生子类

(4)覆盖、重写

重写:完全同样的signature

实际执行时用哪种方法,在运行时决定

子类中调用父类中的方法:super(父类),this(自己)

@Override会检查签名是否一致

子类的可见性不能比父类的窄

5.抽象类

抽象方法:只有定义没有实现 abstract

抽象类:抽象类不能实例化

继承某个抽象类的子类在实例化时,所有父类中的抽象方法必须已经实现

具体类->抽象类->接口

一个类可以实现多个接口,一个类只能继承一个父类

通过继承实现抽象类,通过实现 实现接口

6.多态、子类型、重载

(1)特殊多态 重载:一个方法可以有多个同名的实现

重载:多个方法具有同样的名字,但有不同的参数列表或返回值类型

静态类型检查 编译时明确使用哪种方法

重写方法在运行阶段动态检查

(2)类型多态:一个类型名字可以代表多个类型(泛型编程)L

参数多态性是指方法针对多种类型时具有同样的行为,此时可使用统一的类型变量表达多种类型。在运行时根据指定类型确定具体类型,编译为.class文件时擦除

泛型类:在类后<>写入泛型

泛型接口:在接口名字后<>写入泛型,可以有泛型的实现类和非泛型的实现类

(3)子类型多态、包含多态:一个变量名字可以代表多个类的实例

7.Object类

所有方法的父类

equals,toString,hashCode

第八讲 ADT和OOP中的等价性

1.等价性的判断

(1)基于AF定义ADT的等价操作

(2)站在外部观察者的角度:对两个对象调用任何相同的操作,结果都相同,则认为这两个对象是等价的。

2.==vs equals();

对基本数据类型 用==判定相等

对对象类型 使用equals()

Object.equals()使用==实现判断

3.实现equals()

在Object中缺省equals()在判断引用等价性,往往需要重写

If(!(o instance of xxx)

Return false;

Instanceof 判断某个对象是不是特定类型,动态类型检查

4.Object中equals()的契约

除非对象被修改了,否则多次调用equals应该是相同的结果。

相等的对象,其hashCode结果必须是一致的

自反、对称、传递

等价的对象必须有相同的hashCode,重写equals的同时要重写hashCode()

5.可变类型的等价

观察等价性和行为等价性

可变类型的改变会改变hashCode

对可变类型来说,实现行为等价性,无需重写equals

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值