OOP
OOP以类为核心概念
一般采用泛型,继承,多态,动态匹配方式。
编写类的时候注意对象的状态行为
类变量是类共享的,同理还有类方法,其余的是实例方法。静态方法不能调用非静态方法
一个接口可以扩展其他接口,类可以实现多个接口,接口中没有方法的实现,只有定义。接口可以有多种实现。在java8中可以有静态方法
调用者理解ADT只需要理解接口,不能在ADT的表示上创建无意的依赖,不同实现可以在不同的类中,抽象数据类型多个不同表示可以共存于同一个程序作为实现接口的不同类。
信息隐藏
内部数据和实现细节的隐藏程度是模块化设计质量评价的重要标准。API同实现分离,模块间只通过API通讯
可以在不妨碍调用者情况下,在后期将私有变为公有,但是不能进行相反操作,会破坏调用者使用。
重写和覆盖
子类可以重写父类中的方法,当父类方法是final时只能继承不能重写。子类可以调用super来使用父类中被重写的方法,调用父类的构造方法必须构造方法的第一行。
final类型的 field不可reassignment method 不可被overriding final的class不可被extend
多态
一个函数可以有多个重名的实现
一个类型的名字可以代表多个类型
一个变量名字可以代表多个类的实例
Overloading
重载是在一个类中存在多个同名函数,必须具有不同的参数列表,返回类型可同可不同。
这种方式对于同一种功能的不同情况下的实现很好用。同时在构造函数中常常采用重载的方式。
重载可以在父类或子类中进行。
泛型编程
泛型编程比较常见,比如在第三个实验中就采用了泛型编程。在编程时并不知道需要的具体的类是什么,只是暂时用一个符号表示有这样一个类。在具体实现时,将需要的类代替符号即可。这种编程具有很好的通用性。注意,静态方法不能使用所在泛型类定义的泛型变量。静态方法要用泛型的话,必须将静态方法也定义成泛型方法。java 中泛型是不型变得,也就是不能依靠符号是继承的,就判断所代表得类型是继承的。
Subtyping
子类型里面的规格说明,不能弱于父类型。采用这种方式,可以通过对父类型的统一操作来对子类型进行操作。这种方式在strategy模式中有很好的体现。通过调用父类型的方法,来操作不同的子类型。得到不同的结果。
类型转化
尽量避免向下转化。
在equals中常用的方法instance of 是操作不是方法,而且这种操作有可能会带来类型不安全。
动态分配
动态分配其实就是在执行代码时,决定在多态中要执行哪个方法。主要分为编译阶段和执行阶段。在编译阶段在相对应的类中,寻找参数最匹配的方法。在执行阶段找到接受类,之后在类中找到对应方法。