关于java:JavaSE-多态

42次阅读

共计 1121 个字符,预计需要花费 3 分钟才能阅读完成。

多态:

对象的多种表达形式(废话).

同一个接口应用不同的实例

为什么要重写:

因为父类的办法不满足应用要求时.

办法的参数应用父类类型时, 能够接管其下所有子类的对象作为参数, 同时在执行时仍依照子类重写的办法, 从而升高代码反复度.


体现

重载和重写

重载: 一个类中办法的多态性体现(多态的动态体现)

重写: 子父类中办法的多态性体现(多态的动静体现)

多态的三个条件

继承

重写

向上转型

被重写的办法不再是子类的办法, 不能用子类的对象应用.

多态的应用

向上转型: 父类援用指向子类对象(主动转换)

父类 父类援用 = 子类实例;

Parent p = null;
Child c = new Child();
p = c;

向下转型: 将父类对象转换为子类实例

子类 子类援用 = (子类)父类实例;

强转前须要额定检测, 否则可能出错

类型转换异样 ClassCastException

须要用 instanceof 进行检测

向上转型的重点

编译时依照父类的办法编译, 即只能调用父类名下的办法

执行时, 如果名下的办法被重写了, 那将调用子类重写的办法.

(须要留神的是, 向上转型后,不能调用子类有然而父类没有的办法 , 并且 能够调用父类有然而子类没有的办法). 例:

首先 A 的对象只有两个办法,B 的对象有三个办法

AA-AA-AD-BA-BA-AD-BB-BB-AD

总结:

首先, 前提:

对象只能应用申明类型 (即创建对象时 = 右边的类型) 的所蕴含属性和办法

特例:

子类能够应用父类的不重名属性和办法 .(因为 继承)

产生重写时,向上转型的父类执行同名办法时依照子类的办法来执行 , 其余办法 (不同名办法) 仍依照父类本人的办法执行 .(即 多态)

父类对象

只能应用本人的属性和办法,

无奈应用子类的属性和办法.

子类对象.

属性:

能够应用本人的属性和 父类的不重名 (与子类属性不重名) 的属性 (因为 继承).

然而在 子类的外部, 能够应用 ”super.”来调用父类的与子类重名的属性. 因为子类内蕴含一个援用 super 指向其父类对象,实质上仍是应用父类对象来调用父类属性.
因为该过程只能在子类外部产生, 不能通过子类对象间接实现, 所以与多态无关.

办法:

能够应用本人的办法和 父类的未被重写的办法 (因为 继承).

子类外部能够应用指向父类对象的援用 super来调用父类被重写的办法, 实质上仍是父类对象应用本人的办法. 所以也与多态无关.

子类对象向上转型

属性:

向上转型后, 即为父类类型, 所以只能应用父类的属性. 且 不能应用子类的属性.

办法:

向上转型后, 即为父类类型, 所以 只能应用父类名下的办法 , 然而因为存在办法重写, 产生重写的办法在执行时依照子类的办法来执行.


对于静态方法, 因为 静态方法无奈重写, 也就不产生多态. 即便应用对象进行调用, 也是在各自类的办法区的动态域中找到并执行, 因而互不影响. 动态属性相似.

正文完
 0