java基础之三大特性 多态

目录

多态

虚拟方法调用

对象多态的总结

对象的类型转换(casting)

多态

多态在java中有俩个体现

1方法的多态,方法的重载overload和方法的重写override。

2对象的多态,抽象类和接口。

多态:对象的多种父类表现形态。

本态引用:对象引用指向本类类型的变量

多态引用:对象引用指向父类类型的变量

java引用型变量有两个类型,一个是编译时类型,和运行时类型。

编译时类型由声明该变量时使用的类型决定。

运行时类型由实际赋给该变量的对象[对象引用]决定。

若编译时类型和运行时类型不一致,就会出现多态,polymorphism。

对象的的上转型对象(upcasting )

例如:

假设 B是A的子类或者间接子类,那么如下。

B b = new B();// 本态引用

A a = new B(); //多态引用

此时对象a就是子类对象b的上转型对象。(老虎是哺乳动物一样)

对象的上转型对象的实体是由子类负责创建的,但是上转型对象会失去原对象的一些属性和功能。上转型对象具有如下特点

1 上转型对象不能操作子类声明定义的成员变量,不能使用子类声明定义的方法。

2 上转型对象可以代替子类对象去调用子类重写的实例方法。(如果子类重写的方法是实例方法,那么上转型对象调用 重写的方法 时,就是 通知 对应的子类对象去调用这些方法。因此 如果子类重写了父类的某个实例方法后,子类对象的上转型对象调用这个方法时,一定是调用了重写的方法。)

3 上转型对象可以调用子类继承的成员变量和隐藏的成员变量。

4 可以将对象的上转型对象再 强制转换 成一个子类对象,这是又具备了子类的所有属性和功能。

A extends B;

A a = new B ();

B b = (B) a

虚拟方法调用

( 简单理解,上转型对象不是父类创建的对象,而是子类对象的简化形态,不关心子类对象新增的功能,只关心子类继承和重写的功能)

利用上转型对象实现 虚拟方法调用 (virtual method invocation)

虚拟方法调用

1.编译时绑定父类类型

2.运行时绑定子类类型

虚拟方法前提:

需要存在继承或者实现关系,要有覆盖操作 成员方法:

编译时:要查看引用变量所属的类中是否有所调用的方法。(编译时检查父类类型)

运行时:调用实际对象所属的类中的重写方法。 (运行时执行子类类型)

对象多态的总结

成员变量:不具备多态性,只看引用变量所属的类。

子类的多态引用 调用的属性是其父类的属性,而不是子类的同名属性,即属性没有多态性,调用方法的时候,一定是调用子类重写的方法。
(当子类的属性和父类属性同名时)

A extends B;

A a = new B ();

B b = (B) a

多态引用的 应用举例

1 【多态数组】定义父类类型的数组,统一管理其子类重写的方法

A[] a = new A[5];

a[0] = new B();

2 多态参数 ,将父类类型作为方法的形参,在方法中操作子类重写的方法或者父类的属性。

对象的类型转换(casting)

基本数据类型

自动转换 long g = 20 ;double d = 12.0f;

强制转换 byte b = (byte)34 ;int i = ( int ) 1200L;

对象的强制类型转换称为造型

子类到父类的类型可以自动转换

子类的多种父类形态,接口形态和父类形态可以转换,需要强制转换。

A a = new B(); 上转型对象

[ B 是 A 的子类或间接子类】

父类到子类的类型转换必须通过 造型 实现

B b = (B) a; 上转型对象 造型到 子类对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值