本章讲述了ADT的具体实现技术:面向对象编程OOP。其特点主要包括:
(一)基本概念
对象:属性与行为相统一的具体实例
类:具有相似属性与方法的一组对象的抽象。广义上来讲,类的方法是类的应用程序接口API
类方法与类成员变量:一般用static修饰,只在类中定义一次,在调用时可以通过类来调用,不需要先生成实例。
实例方法和实例成员变量:在调用时必须先创建一个实例,才能通过实例调用这些方法与变量。
(二)接口
接口是一种特殊的类,其中只进行方法的定义而不进行实现(标准的接口只有定义,但java的接口允许静态方法的实现),方法的实现则交给实现类-接口的继承与扩展。不过接口之间也是可以继承和扩展的。
可以在接口中进行spec,在实现类中完成方法,使结构更清晰。
另外,推荐在接口中用一个静态方法来作为构造器,如
有时接口的实现类之间有公用的实现方式,可以使用default来避免重复编写,如下:
(三)封装和信息隐藏
通过接口类型进行声明,而客户端只是用接口定义的方法,客户端代码无法直接访问属性。通过public等修饰词来明确方法的适用范围。
(四)继承和重写
子类继承父类,在子类中可以重写父类中的部分方法,通过重写override来在子类中改变继承而来的方法的功能,如果在父类中的方法有实现的话,子类中就可以直接继承,并且如果重写了的话调用时就可以选择是使用子类的重写方法还是父类的方法。
当父类的方法被final修饰时,子类就无法重写父类的这个方法,称为严格继承。
在重写时,前后方法的签名要保持一致,包括修饰符、返回类型、方法名和方法参数。
(五)抽象方法和抽象类
抽象方法是只有定义没有实现的方法。
至少有一个抽象方法的类为抽象类,不可实例化。继承抽象类的子类要么实现了所有抽象方法,要么仍是一个抽象类。
(六)多态、子类型、重载
(1)三种多态
特殊多态:方法重载,一个方法多个实现
参数化重载:一个类型名字代表多个类型(泛型编程)
子类型多态:一个变量名包含多个类的实例。
(2)特殊多态和重载
同名方法不同参数或返回值,是静态类型检查(另外重写是动态检查)。重载可以发生在父子类之间,且被子类重载的方法,子类同时也会继承其在父类中对应的方法。
例子:
(3)参数多态和泛型
方法可以根据不同类型进行相同的行为,这依靠泛型来实现。泛型通过类型变量来完成从具体类型到泛型的抽象,用<>作为标识,比如<L,E>,L与E就可以在生成实例时换为其他类型。
泛型的应有有三种:泛型类,泛型接口,泛型方法
其中泛型方法的第一个<T>是泛型的
(4)子类型多态
一个类可以实现多个接口,但是只能有一个父类。子类型的规约要不弱于父类型。
(七)Object类的重要方法
equals:两对象equals则返回true
hashCode:返回用于hash map的hash code
toString:返回一个可打印的字符串表示
由于所有的类都是Object的子类。