哈工大2022软件构造第 7.8章学习笔记

这篇笔记详细介绍了Java中的面向对象编程概念,包括接口、抽象类、具体类的区分,重载和重写的原则,泛型的使用,以及等价性和equals()、hashCode()方法的重写注意事项。此外,还探讨了多态的三种形式:特殊多态、参数化多态和子类型多态。
摘要由CSDN通过智能技术生成

1. OOP面向对象编程

1.1接口,抽象类,具体类

抽象类:具有抽象方法的类;抽象类不能实例化。一个类至少包含一个抽象方法。
抽象接口:只含有抽象方法的抽象类。
具体类:ADT中的所有方法都必须实现。一个类可以实现多个接口。
接口中的属性默认是public static final的,不能具有构造方法,也要符合ADT中的条件。
接口中的构造函数可以通过static编写的工厂方法实现,用于在接口中直接创建一个示例。
在接口中添加方法可以用default方法实现。
总的来说,接口用于规定方法,而类用于实现方法。

//接口实例
interface CharSet{
public int add(char x);
public boolean find(char x);
}
//客户端代码
CharSet set =ArraySet();
set.add("a");

在这里插入图片描述
在这里插入图片描述

1.2 继承 override

public void A extends B{	//继承
		......
}

Override的要求
在子类中如果想对父类的方法进行重写,有以下几个要求

重写的函数需要与被重写的函数有着同样的签名。
在执行的时候调用哪个方法,在运行的时候才会被决定。就是说如果调用父类中的方法就是调用父类,子类就是子类。
我们通过观察被冲写的父类型的函数体的特点可以作出以下总结:

如果父类型中的被重写函数体不为空,那就意味着对其大多数子类型来说,该方法是可以被直接复用的。
对某些子类型来说,有自己的特殊性,所以重写父类型中的函数,实现自己的特殊要求
如果父类型中的某个函数实现体为空,意味着其所有子类型都需要这个功能,但各有差异,没有共性,在每个子类中均需要重写。
子类对象 instanceof 可转换为父

1.3 重载 overload

重载(overload)机制使得同一个类中的多个方法可以有相同的名字,前提是它们
有长度不同的参数列表,或者对应不同的参数类型,起码,得让编译器在进行静态
检查的时候通过你调用时传入的参数判断实际上应该选择哪个方法。重载也可以发
生在父类与子类之间(子类重载父类的方法)。
func1
func
在这里插入图片描述
多态
特殊多态
一个方法可以有好几个同名的实现方式,在很多编程语言中,特殊多态被一种叫方法重载的形式支持。
参数化多态
代码的参数不被限制于特定的数据类型而进行的编程,也就是说一个类型名字可以代表多个类型。参数化多态更为熟知的叫法叫泛型编程
子类型多态
一个变量的名字可以代表多个类的实例,继承 重写

1.4泛型

如果一个接口声明了一个或多个类型变量,那么它就是泛型的。

这些类型变量称为接口的类型参数。
它定义了一个或多个作为参数的类型变量。
通用接口声明定义了一组类型,每个类型参数部分的可能调用都有一个类型。
所有参数化类型在运行时共享相同的接口。
无任何继承关系(不可协变)

1.5 等价性与equals()

观察等价性:两个对象通过AF映射到相同的抽象值或两个
对象能做出效果相同的行为
行为等价性:调用对象的任何方法都展示出一致的结果,基本相当于= =。
可变类型倾向于看它严格的观察等价性,但是有些时候观察等价性会导致RI出现问题:
当可变类型放入set这种集合类中,当它变化时,hashcode随之改变,set直接就找不到了。
因此对于这种可变类型我们可能不要求重写equals()。
对于StringBuilder我们一般常看它的行为等价性。

1.6hashcode()

在重写equals()时,我们也要重写hashcode()。
由于java的规定,等价的两个对象必须要有相同的哈希值,同时尽可能使得不等价的对象的哈希值不同。哈希值是跟对象一一对应的。
hashCode()一般用在基于哈希表的集合类中(HashMap、HashSet)。查找一个对象时,
先通过hashCode直接找到对象对应的桶,再在桶里一个个用equals比较。
总之要根据对象的特性写出不同的hashcode()。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值