第八章 多态
- 绑定:将一个方法调用同一个方法主体关联起来叫做绑定
- 前期绑定:在程序执行前进行绑定(由编译器和链接程序实现),面向过程语言的默认绑定方式,例如C只有前期绑定一种
- 后期绑定:在运行时根据对象的类型进行绑定,用于解决当有很多子类继承某一个基类的时候,而且这些子类都有一个共同的方法,当实现多态时,会根据传入的不同的子类调用相对应的方法
- Java中除了static方法和final方法(private默认final)之外,其他方法都是默认后期绑定
- 私有方法不能被覆盖,子类中产生的是新的方法
- 直接访问某个域时,这个访问就将在编译期间进行解析
package com.zww.charpter8; class Super{ public int field = 0; public int getField(){ return field; } } class Sub extends Super{//此时Sub有两个field域 public int field = 1; public int getField(){ return field; } public int getSuperField(){ return super.field; } } public class FieldAccess { public static void main(String[] args) { // TODO Auto-generated method stub Super sup = new Sub(); System.out.println(sup.field);//0 } }
- 静态方法是与类,而并非与单个的对象相关联的
- 构造器内部一般不要使用多态
- 协变返回类型:表示在导出类中的被覆盖方法可以返回基类方法的返回类型的某种导出类型
- RTTI
- Java中所有的转型都会被检查
- C++:dynamic_cast<>
第九章 接口:接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法
- 抽象类(相当于c++中的纯虚函数):包含抽象方法的类,当然也可以定义一个没有抽象方法的抽象类
- 接口:产生一个完全抽象的类,根本没有方法实现
- 可以包含域,但是域都是static和final的
- 方法自动为public
- 策略模式:创建一个能根据所传入参数对象的不同而具有不同行为的方法,具体可见后续的设计模型系列
- 适配器模式:适配器中的代码将接受你所拥有的接口,并产生你所需要的接口
- 使用接口的原因:一是为了能够向上转型为多个基类型(接口可以实现多重继承);二是防止客户端创建其对象
- 接口之间是继承关系,extends
- 在接口中定义的域不能是"空final",但是可以被非常量表达式初始化,如rand.nextInt
- 接口可以嵌套在类或者其他接口中,比较混乱,各种限制被严格执行,可见page185页
- 工厂方法设计模式:生成遵循某个接口的对象