面向对象的编程(OOP)
基本概念
- Object(对象)
一个状态和行为的集合
状态:对象包含的数据,称为fields
行为:对象所支持的行为,称为methods - Classes(类)
- 每一个对象都有一个类,这个类定义了fields和methods,统称为成员(members)
- 类定义了类型和实现,在哪里可以用和如何具体做
- 松散地说,类的方法是其应用程序编程接口(API)
定义用户如何与实例交互 - class variable (类成员变量)
一个变量与类关联而不是与类的实例关联 - class methods(类方法)
与类关联的方法 - instance methods(实例方法) 和instance variable (实例成员变量)
非类方法或者类变量的方法和变量 - 静态方法
不与类的任何特定实例相关联,而必须对特定对象调用实例方法(直接拿来用)
接口和枚举
- 接口(interface)
- 是方法签名列表,没有方法体
- 如果类在其implements子句中声明接口,则它实现接口,并为接口的所有方法提供方法体
- 接口之间可以扩展与继承
- 一个类可以实现多个接口
- 一个接口可以有多种实现类
- 不能包括构造器,允许类实现接口中没有的方法
接口:确定ADT规约,类:实现ADT - 多个实现类时
客户端必须知道该接口的某个具体实现类的名字,使用静态方法来写一个类似构造器的,去指明使用的是哪一个具体实现类
- 枚举(Enumerations)
当值集很小且有限时,将所有值定义为命名常量(称为枚举)是有意义的。
封装和信息隐藏
- 信息隐藏
区分一个设计良好的模块和一个糟糕的模块的一个最重要的因素是它对其他模块隐藏内部数据和其他实现细节的程度
好处- 分离组成系统的类
允许它们被开发、测试、优化、使用、理解,单独修改 - 加快系统开发
类可以并行开发 - 减轻维护负担
类可以更快速地理解和调试,而不必担心对其他模块的损害 - 实现有效的性能调整
“热”类可以单独优化 - 增加软件复用
松散耦合的类通常在其他上下文中被证明是有用的
- 分离组成系统的类
private 只能从声明类中访问
protected 可从声明类的子类(和包内)访问
public 随处都可访问
继承和重写
- 重写(overriding)
可重写方法:允许重新实现的方法。–在Java中,方法在默认情况下是可重写的,即没有特殊的关键字。
strict inheritance(严格继承)子类只能添加新方法,不能重写超类中的方法,超类中方法添加final- final
final field 防止在初始化后重新分配到该字段
final method 防止重写
final class 防止扩展(extend)
- final
- 抽象类
包含至少一个抽象方法的类(接口则是全部是抽象方法的类) - 继承
父类的抽象函数,在子类里面实现可以直接使用父类的fields,父类的方法可以直接使用
多态,子类型和重载
- 多态
-
特殊多态
一个函数(名字相同),但是其类型不同
- 重载overloading
多个方法具有同样的名字,但有不同的参数列表或者返回值类型。静态方法,是一种静态多态,在编译阶段决定要具体执行哪个方法
区分overriding和overloading
前面那个是方法内部改变,后面的是函数返回值或者是参数类型改变
- 重载overloading
-
参数化多态
一个函数在一系列类型上一致工作,java中的泛型
类型变量:使用<>
泛型类:含有一个或者多个类型变量
泛型接口:接口声明类型变量
1.非泛型的实现类public class chaset implement set<character>
2.泛型的实现类
public class chaset<R> implement set<R>
泛型方法:方法声明类型变量
-
子类型多态
不同类型的对象可以由用户统一的处理而无需区别
-
重要的对象方法
- hashcode
- tostring