一、上转型对象
1、创建子类与父类
2、上转型对象定义
double age =5;
Mammal mammal=new Whale();
形如double age=5这种自动类型转换,由于Whale类是Mammal类的子类,在进行下面一行代码时会通过类自动类型转化的方式使mammal这个变量的值指向Whale创建的对象,此时称子类对象上转型对象;
3、上转型对象的使用
调用方法时:
1、当调用的方法在子类中已经重写时,所调用是已经被重写了的的方法;[这个可以和多态相联系]
mammal.move();
运行结果为:鲸鱼靠鳍游动
调用属性时:
1、无论是否被覆盖,调用的均为父类中的属性;
System.out.println(mammal.weight);
运行结果为:1000.0
1、无法调用子类中定义的新方法和新属性;(会报错)若是想要调用新的方法和属性必须使用上转型特有的下转型转换:即补充上诉代码 //只有上转型对象才可以使用下转型,要不然不可以运行(只能编译成功,但是运行失败[参考编译时类型 和运行时类型)
Whale whale =(Whale) mammal;
whale.eat();
运行结果:用口吃
二、多态
1、多态的定义
Mammal mammal=new Whale();
如图上转型对象的使用;前面定义的Mammal类变量称作编译时类型,其地址指向Whale对象,这时候whale对象称为运行时类型;
由于上面提到的上转型对象的知识可知:虽然mammal对应的类型是Mammal类型,其重写方法依然对应的是子类,此时称这种状态叫做多态;
二、多态的应用
在多态情况下,在多态的前提下,父类中被子类重写的方法没有必要有方法体,这就是接口的基础;