/*
*作者:呆萌老师
*☑csdn认证讲师
*☑51cto高级讲师
*☑腾讯课堂认证讲师
*☑网易云课堂认证讲师
*☑华为开发者学堂认证讲师
*☑爱奇艺千人名师计划成员
*在这里给大家分享技术、知识和生活
*各种干货,记得关注哦!
*vx:it_daimeng
*/
1、什么是多态
多态是我们可以创建在不同变成上下文中行为不同的方法或者引用的能力。其实简而言之就是调用同一种方法却呈现不同的状态。
在面向对象中多态与封装,继承并称为面向对象的三大特性。
2、多态的产生
是因为由于方法重载/覆盖使得我们的方法的实现发生了改变,但是我们的标识符却没变,因此产生了多态。
3、Java中的多态
在Java中多态可以分为运行时多态与编译时多态。
编译时多态:方法重载时参数的静态数据绑定。通过方法重载实现控制流由编译时本身决定的一种方式。
运行时多态:通过继承实现方法覆盖使得数据动态绑定。
package next.overrideinextends;
public class GrandFather {
public void eatPotato() {
System.out.println("Be careful! The potato is sooo hot!");
}
}
class Father extends GrandFather {
@Override
public void eatPotato() {
System.out.println("Nice!");
}
}
class Son extends Father {
@Override
public void eatPotato() {
System.out.println("Nice!");
}
}
class Output {
public static void main(String[] args) {
GrandFather gf = new GrandFather();
GrandFather f = new Father();
GrandFather s = new Son();
s.eatPotato();
f.eatPotato();
gf.eatPotato();
}
}
运行结果:
编辑
4、向上转型的特点
①向上转型其实就是将子类的内容赋值给父类。
②若子类在父类的基础上做了方法扩展,则子类扩展的功能将无法被父类调用。
③子类若是对父类的方法重写了,则向上转型后,父类调用该方法将不再执行父类的内容而是执行子类的内容。
5、向上转型的好处
向上转型实现了引用的类型统一以及传递参数的统一。
public class GrandFather {
public void eatPotato() {
System.out.println("Be careful! The potato is sooo hot!");
}
}
class Father extends GrandFather {
@Override
public void eatPotato() {
System.out.println("Nice!");
}
}
class Son extends Father {
@Override
public void eatPotato() {
System.out.println("Nice!");
}
}
class Output {
public void aVoid(GrandFather f){
f.eatPotato();
}
public static void main(String[] args) {
GrandFather gf = new GrandFather();
GrandFather f = new Father();
GrandFather s = new Son();
Output output=new Output();
output.aVoid(gf);
output.aVoid(f);
output.aVoid(s);
}
}
,