提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
1.向上转型是什么
在面向对象程序设计中, 针对一些复杂的场景(很多类, 很复杂的继承关系), 程序猿会画一种 UML 图的方式来表示类之间的关系. 此时父类通常画在子类的上方. 所以我们就称为 “向上转型” , 表示往父类的方向转。
people p=new student();
people是student的父类,这里就是把student实例向上转型了,p是一个父类people的引用,指向一个子类student的实例。
2.向上转型的三种方式
- 直接赋值
直接赋值就和上面的代码一样。
- 方法传参
public class Main {
public static void main(String[] args) {
student s1=new student();
people p=new student();
func(s1);
}
public static void func(people p){
p.look();
}
}
此时形参people的类型是父类,实际上传入的是子类的实例。
- 方法返回
public class Main {
public static void main(String[] args) {
people p=lookWhat();
}
private static people lookWhat() {
student s1=new student();
return s1;
}
}
返回的是一个people类型的引用,但实际上对应到student的实例。