一、面向对象的标准
1、OOP以类为核心概念
2、保持ADT
二、基本组成: object, class, attribute, method and interface
1、object
识别现实世界中事物的状态和行为。由对象抽象到类
2、class
每一个对象都有一个类。类的方法为其他应用的接口
static :调用static类型的方法时,可直接 类名字.method(静态房屋无法调用非静态成员)
instance:调用方法时,需要实例化 即 对象.method
3、接口
均为public类。只有方法的名称,无方法的实现(有也为静态方法)
声明:public interface Name{…}
使用:class A implements Name{…}
一个接口可扩展其他接口,一个类可以实现多个接口
接口的好处:
- 调用者理解ADT时只需要理解接口
- 加快系统开发
- 减轻维护负担
- 启用有效的性能调优
- 提高复用
4、继承和重写
(1)继承(为了代码的复用)
Class A extends B
(2)重写
重写:修改父类中的方法。
方法签名(方法名,传参类型,返回值)必须一样(java中可使用@Override IDE 可自动检查方法签名是否有误)
可变性可以不同,但子类的范围需要更加严格
使用super 可调用父类中被重写的方法
一般默认情况下,父类中的方法均可重写。但严格继承(final),只可继承不可重写。
(3)抽象类(抽象类指含有至少一个抽象方法的类)
抽象方法只有定义没有实现;
抽象类不能实例化。当继承某个抽象类的子类在实例化时,所有父类中的抽象方法必须已经实现。
6、多态、子类型、重载
(1)多态:不同类型提供一个接口或一个符号表示多个不同的类型。
类型:
- 方法重载:一个函数可有多个同名的实现
- 泛型编程:一个类型名字可代表多个类型
- 子类型:一个变量名可代替多个类的实例
(2)重载:一个类中存在多个同名函数,必须有不同的参数列表,返回类型可同可不同(容易出问题)
需要和重写区分开
(3)泛型编程和参数的多样性
- 泛型编程:从具体到抽象
- 泛型类:类声明 class Name< T >{…}
- 泛型接口:public interface Name< E >{…}
- 泛型方法:public < E > void Name(E e){…}
< >为占位符,泛型变量是无限制的,可以有多个。
调用泛型方法时会进行类型擦除。静态方法不能使用所在泛型类定义的泛型变量。若要使用泛型,必须将静态方法定义为泛型方法。
即: public static < L > Graph< L > empty(){…}
(4)子类型多态性
- 继承 满足子类型,但不是唯一子类型(Java只支持单继承,但支持多实现)
若B为A子类
前置条件:B<=A 后置条件:B>=A 承诺:B>=A
即子类型规格说明不能弱与父类 - 类型转换
避免向下进行类型转换(父类中方法子类一定有,但子类用方法父类不一定有)
(5)动态分配
动态分配是指决定在运行时一个具有多态的操作,哪个具体实现被选择执行 。
方法:(ab在编译时进行,cd在运行时进行)
- 确定是哪个类
- 确定参数列表
- 确定是哪个动态类
- 找到动态类中的调用方法