怕自己一不小心又会忘记,所以现在更新一下。这篇博客主要记录的是与多态相关的知识。
- 多态通过分离做什么和怎么做,从另一角度将接口和实现分离开来
- “封装”通过合并特征和行为来创建新的数据类型,而“实现隐藏”则通过将细节“私有化”把接口和实现分离开来
- 继承允许将对象视为它自己本身的类型或基类型来加以处理,这种能力极其重要,因为它允许将多种类型(从同一基类导出的)视为同一类型来处理,而同一份代码也就可以毫无差别地运行在这些不同类型之上了
- 多态,也称为动态绑定,运行时绑定,后期绑定
- 多态:编写的代码只与基类打交道
- 将一个方法调用同一个方法主体关联起来叫做绑定
- 如果一种语言想实现后期绑定,就必须具有某种机制,以便在运行时能判断对象的类型,从而调用恰当的方法。也就是说,编译器一直不知道对象的类型,但是方法调用机制能找到正确的方法体,并加以调用
- final并不会改观程序的整体性能
- 多态是一项让程序员“将改变的事物与未变的事物分离开来”的重要技术
- 当sub对象转型为Super引用时,任何域访问操作都将由编译器解析,因此不是多态的
- 域和静态方法是前期绑定的
- 继承与初始化:
- 层层装载基类,装载过程中静态变量从根基类开始初始化
- 必要的类加载完毕,对象就可以被创建,对象中的所有基本类型都会被设为默认值,然后基类的构造器会被调用,在此之前基类中的实例变量按次序被初始化,然后层层往下按照变量初始化,构造器调用的顺序进行
- final修饰词表示类的对象生命周期内是不变的,static final表示整个类而言是不变的
- 构造器中的多态方法,动态绑定在构造器中依然会生效
- 编写构造器中的准则:用尽可能简单的方法使对象进入正常状态;如果可以的话,避免调用其它方法。在构造器内部唯一能够安全调用的那些方法是基类当中的final方法
- 协变返回类型:在导出类中的被覆盖方法可以返回基类方法的返回类型的某种导出类型,而不必须和基类保持一致(覆盖本来是方法名,返回值和签名都一样)
- 运行时类型识别:RTTI(RunTime Type Identify)