多态是指允许不同子类型的对象对同一消息做出不同的响应,简单来讲,就是用同样的对象调用同样的方法但是却做了不同的事情。也可以理解为一个事物的多种表现形态。 多态性分为编译时的多态性和运行时的多态性。例如: 方法重载:实现的是编译时的多态性 方法重写:实现的是运行是的多态性 子类对象的多态性,这个是Java多态性中最常用的事。
1.方法重写,也就是说要有继承吧,只有有了继承,子类重写了父类已有的或抽象的方法 2.对象造型,也就是说要有父类的引用指向子类对象 只有这样,同样的引用调用同样的方法就会作出不同的响应,简单来讲如下代码所示: 父类Person有如下方法:
public void walk(){
System.out.println("人走路");
}
public void eat(){
System.out.println("人吃饭");
}
如果子类Man类没有重写这两个方法,那么我们做如下的事情:
Person man = new Man();
man.walk();
输出结果:
人走路
综上所述:父类引用man指向的是子类对象,这个就是子类对象的多态性(也叫向上转型),man可以调用父类的方法,前提是子类没有重写父类方法。 如果子类Man类重写了父类方法
public void walk(){
System.out.println("男人应该挺拔的走路");
}
public void eat(){
System.out.println("男人应该多吃肉");
}
同样的调用:
Person man = new Man();
man.walk();
结果就是:
男人应该挺拔的走路
综上所述:子类对象重写了父类方法,那么man调用父类方法,执行的就是子类的方法。这个也虚拟方法调用,说到这里你应该可以猜到,什么是多态了吧,就是同样的父类对象应用,指向不同的子类对象,就会作出不同的响应,例如子类Woman类也重写了父类的方法:
public void walk(){
System.out.println("女人应该温柔的走路");
}
public void eat(){
System.out.println("女人应该少吃肉多吃水果蔬菜");
}
调用方法:
Person man = new Man();
Person woman = new Woman();
man.walk();
woman.walk();
结果为:
男人应该挺拔的走路
女人应该温柔的走路
综上所述:应该是很清晰了什么是子类对象的多态性,就是你相同的父类引用,不同的子类对象,就会响应对应的子类对象的方法。
本文对Java多态的实现条件讲的已经很透彻了,动力节点在线的视频课程还有许多的精彩课程等你免费来学!
提枪策马乘胜追击04-21 20:01
代码小兵92504-17 16:07
代码小兵98804-25 13:57
杨晶珍05-11 14:54