多态
理解
多态:一种事物有多种表现形式。面向对象的最后一个特征,继承和封装都是为多态打基础!
生活中的多态:
打招呼:
中国人:你好
英国人:hello
日本人:拷逆七娃
韩国人:阿娘哈赛you
泰国人:萨瓦迪卡
多态的体现
1、方法的多态性
方法的重写和重载
2、对象的多态性
对象的转型上!
Person p = new Student();
引用类型之间的类型转换(对象的多态)
前提:父子关系
一、向上转型
本质:父类的引用指向了子类的对象
语法:
父类类型 引用名 = new 子类类型();
特点:
编译看左边,运行看右边
可以调用父类类型中的所有成员,不能调用子类类型中特有成员;最终运行效果看子类的具体实现!
二、向下转型
语法:
子类类型 引用名 = (子类类型)父类引用;
特点:
①只能强转父类的引用,不能强转父类的对象
②要求父类的引用必须指向的是当前目标类型的对象
③可以调用子类类型中所有的成员
补充:属性没有重写之说!属性的值看编译类型
实例1:用来说明向上转型时,对于属性则访问左边类型,对于子类重写方法,则调用方法是访问的是子类的方法
/**
* 此类用于演示关于属性的多态型
* 属性:没有重写之说
* 通过多态访问属性时,属性值要看左边的编译类型!
*
*/
public class TestPoly2 {
public static void main(String[] args) {
//使用多态
Father f = new Son();
f.show();//打印Son的show
System.out.println(f.name);//打印出来的是张翠山
}
}
class Father{
String name="张翠山";
public void show(){
System.out.println("father show");
}
}
class Son extends Father{
String name="张无忌";
public void show(){
System.out.println("son show");
System.out.println(super.name);
System.out.println(this.name);
}
}
多态的应用
1、多态数组
数组的元素类型允许是子类类型,相当于可以容纳更多的元素
2、多态参数
实参的类型允许是子类类型,相当于提高了代码的通用性和扩展性