JAVA学习多态

本文详细介绍了Java中的多态性,包括子类和子类型的概念,如何通过父类变量操作子类对象,以及多态变量的特性。讨论了静态和动态绑定的区别,着重阐述了方法重写(override)的条件和作用,强调了动态绑定在多态调用中的关键角色。此外,还提到了方法重载(overload)的规则,并提醒了构造函数和静态方法的不同特点。
摘要由CSDN通过智能技术生成

多态变量与多态机制
子类和子类型
• 类定义了类型;
• 子类定了子类型;
• 子类型的对象可以被当做父类的对象来使用
✓赋值给父类的变量
✓传递给需要父类对象的函数
✓放进存父类对象的容器

子类型与赋值
在这里插入图片描述
子类与容器
在这里插入图片描述

多态变量
• 一个变量可以管理其所声明的类型或该类型的任何子类型。 • Java中保存对象类型的变量是多态变量。 • “多态”这个术语(字面意思是许多形态)是指一个变量可以保存不
同类型(即其声明的类型或任何子类型)的对象。

多态变量
• Java的对象变量是多态的,它们能保存不止一种类型的对象
• 它们可以保存的是声明类型的变量,或声明类型的子类的对象
• 一个管理对象的变量具有两个类型
• 静态:声明类型
• 动态:运行时类型
• 二者可能一致,也可能不一致
• 当把子类的对象赋给父类的变量时,就发生了向上造型
• 造型:把一个类型的对象,赋给另一个类型的变量

造型 cast
• 子类的对象可以赋值给父类的变量
• Java中不存在对象对对象的赋值!
• 让这两个对象的管理者管理共同的对象
• 父类的对象不能赋值给子类的变量
Vechicle v;
Car c = new Car();
v=c; //ok
c=v; //编译错误
• 可以用造型:
c = (Car) v;
只有v这个变量实际管理的是Car才行

造型和类型转换的区别:
基本类型对应着类型转换,原始数据会改变
• 对象类型对应着造型,原始数据不会改变,只是被“当做”其他类
型看待,并没有进行改造。

多态的基础:函数调用的绑定
• 当通过对象变量调用函数的时候,调用哪个函数这件事情叫做绑定
✓静态绑定:编译器在编译阶段已知道调用哪个函数,根据变量的声明类型来
决定(static、private、构造函数、final) ✓动态绑定:编译器在编译阶段不知道要调用哪个函数,直到运行时根据变量
的动态类型来决定(默认)
• 在成员函数中调用其他成员函数也是通过this这个对象变量来调用的

重写override
• 子类和父类中存在名称和参数表完全相同的成员函数,这一对成员
函数构成重写关系
• 通过父类变量调用存在重写关系的函数时,会调用变量当时所管理
的对象所属的类的函数
• 多态:通过一个变量去调用一个函数,只是写了一条语句,并不去
判断变量的静态类型,但这个变量管理的对象所对应的函数会被自
动调用

总结
• 方法重写override必须满足下列条件: • (1) 子类的方法名及参数必须和父类被重写的方法相同
• (2) 子类的方法返回类型[层次]必须小于等于父类被重写的方法
• (3) 子类的方法权限修饰符必须大于等于父类被重写的方法
• 方法重载overload必须满足下列条件: • (1) 方法名必须相同
• (2) 在方法的参数不同的情况下,方法的返回类型可以不相同。
注意
• 构造函数能够重载overload,但是不能够被重写override。 • 静态函数能够被重写override,但是没有实现多态效果。
• 函数重载overload有静态函数重载和普通函数重载。
• 静态函数重载是静态绑定,函数调用是通过:类名.函数。
• 普通函数重载是动态绑定,函数调用是通过:实例对象引用.
函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值