5.6面向对象特征之三:多态性
多态性, 是面向对象中最重要的概念,在java中有两种
体现: 类
1.方法的重载loverload)和 重写(overwrite)
2. 对象的多态性一- 可以直接应用在抽象类和接口上
Java引用变量有两个类型:编译时类型和运行时类型。编译
时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。
➢若编译时类型和运行时类型不一致,就出现多态
(Polymorphism )
多态性(2)
对象的多态一在Java中, 子类的对象可以替代父类的对象
使用
- 一 个变量只能有种确定的数据类型
- 一个引用类型变量可能指向(引用多种不同类型的对象
Personp new StudentO:
Objecto new Person();//Object类 型的变量o,指向Person类型的对象
o = new Student(); //Obecl类型的变量o, 指向Student类型的对象
子类可看做是特殊的父类,所以父类类型的引用可以指向
子类的对象:向上转型(upcasting)。
多态性(3)
一个引用类型变量如果声明为父类的类型,但实际引
用的是子类对象,那么该变量就不能再访问子类中添加的属性和方法
Student m = new Student();
m.school = “pku”;
/ 合法,Student类有school成员变量
Person e = new Student();
e.school =“pku";
//非法,Person类没有school成员变量
属性是在编译时确定的,编译时e为Person类型,没有school成员变量,因而编译错误。