多态
...大约 2 分钟
多态变量
Java的对象变量是多态的,它们能保存不止一种类型的对象,它们可以保存的是声明类型的对象,或声明类型的子类的对象例:当父类为 item
,子类为 CD
和 DVD
时
public static void main(String args[]){
item a = new item();
item b = new CD(); //向上造型
item c = new DVD();
}
每一个Java的对象变量,都具有两个类型:一个是声明类型,一个是动态类型。有时候两者是一致的,有时候又不一样这就是变量的多态(在运行过程中,它所管理的对象类型是会变化的)
造型(cast)
造型:把一个类型的对象,赋给另一个类型的变量
提示
对象的赋值并不是将一个对象赋值给另一个对象(在C++中可以),而是让这两个对象的管理者去管理同一个对象
当给一个对象变量管理着与它声明(静态)类型不符的对象时,就发生了造型
向上造型
当把子类的对象赋给父类的变量的时候,就发生了向上造型 向上造型是默认的,不需要运算符 向上造型总是安全的
多态
多态指的是不同对象在调用同一个方法时表现出的多种不同行为。它允许不同的对象因为参数的不同对同一消息进行不同的响应。例如:要实现一个动物叫的方法,由于每种动物的叫声是不同的,因此可以在方法中接收一个动物类型的参数,当传入的参数不同时,实现不同动物的叫声。
函数调用的绑定
当通过对象变量调用函数的时候,调用哪个函数这个事情叫做绑定,分为两种:
- 静态绑定:根据对象的声明类型来决定
- 动态绑定:根据对象的动态类型来决定
for(Item item: listItem){
item.print();
System.out.println();
}
当在遍历 listItem
时,我们无法知道遍历到的对象到底属于什么类型,但程序会自动调用对应类型的对应方法,这属于动态绑定。
Java中多态主要有以下两种形式:
- 方法的重载
- 对象的多态性(方法重写)
Powered by Waline v3.2.0