《java编程思想》学习笔记——多态

8.1再论向上转型

一、多态经过分离作什么和怎么作,从另外一角度将接口和实现分离开来。java

二、“封装”经过合并特征和行为来建立新的的数据类型。“实现隐藏”则经过细节“私有化”把接口和实现分离开来。设计

三、继承容许将对象视为它本身自己的类型或其余类型来加以处理。对象

8.2起色

8.2.1方法调用绑定

一、将一个方法调用同一个方法主体关联起来被称做绑定,若在程序执行前进行绑定(若是有的话,由编译器和链接程序实现),叫作前期绑定。继承

二、后期绑定也叫作动态绑定或运行时绑定。编译器一直不知道对象的类型,可是方法调用机制能找到正确的方法,并加以调用。 三、java中除了static方法和final方法(private方法属于finla方法)以外,其余全部的方法都是后期绑定。接口

四、为何要将某个方法声明为final呢?编译器

(1)防止其余人覆盖该方法。编译

(2)这样作能够有效的“关闭”动态绑定,或者说,告诉编译器不须要对其进行动态绑定。扩展

8.2.2产生正确的行为

8.2.3可扩展性

8.2.4缺陷:“覆盖”私有方法

一、private方法被自动认为是final方法,并且对导出类是屏蔽的。权限

二、只有非private才能能够被覆盖。数据类型

8.2.5缺陷:域与静态方法

一、只有普通的方法调用能够是多态的。例如:若是你要直接访问某个域,这个访问将在编译期进行解析。

二、若是某个方法是静态的,它的行为就是不具备多态性。

8.3构造器和多态

一、构造器并不具备多态性(它们其实是static方法,只不过该static声明是隐式的)

8.3.1构造器的调用顺序

一、基类的构造器老是在导出类的构造过程当中被调用,并且按照继承层次主键向上连接,以使每一个基类的构造器都能获得调用。这是由于:构造器具备一项特殊任务,检查对象是否被正确地构造。

二、只有基类的构造器才具备恰当的知识和权限来对本身的元素进行初始化,所以必须令全部构造器获得调用,不然就不可能构造完整对象。

三、复杂对象调用构造器要遵守下面的顺序

(1)调用基类构造器

(2)按顺序调用成员的初始化方法

(3)调用导出类构造器的主体

若遵循这一规则,那么就能保证全部基类成员以及当前对象的成员对象都被初始化了。

8.3.2继承与清理

一、销毁的顺序应该和初始化顺序相反。

8.3.3构造器内部的多态方法的行为

一、若是在一个构造器的内部调用正在构造的对象的某个动态绑定方法,会发生什么状况呢?

如书上的例子:调用Glyph构造器的时候,Glyph。draw()方法被子类的方法覆盖,因此实际调用的是子类的方法,单radius还没被初始化,因此radius=0

二、编写构造器时有一天有效的准则:用尽量的方法是对象进入正常状态,若是能够的话,避免调用其余方法

8.4协变返回类型

一、她表示在导出类的被覆盖方法能够返回基类方法的返回类型的某种导出类型。

8.5用继承进行设计

一、用继承表达行为间的差别,并用字段表达状态上的变化。

相关文章
相关标签/搜索