烂大街的一句话是:多态是Java面向对象三大特征(封装、继承、多态)之一。
多态其实很好理解。
比如回家,今天下班你要回家,回家你可以有好几种方式选择,步行(太累了,夏天还会满头大汗),坐公交车(虽然很拥挤,但是很实惠呀),打车(家里肯定有机子在挖矿),自驾(没啥说的,自己的车一个字"自由")。
在这里,回家就是一个类(BackHome),并且是一个父类。步行、坐公交车、打车、自驾都是子类。想要回家,我只需要继承“回家”这这个父类,然后就可以有很多种回家的方法了,这便是多态。
可以看出,多态是方法的多态,和属性无关。想要实现多态必须有继承、重写(重载)、向上转型。
package testjava;
/**
* @Description:多态
* @author:豆腐兄
* @date:2022/6/7 17:26
*/
public class BackHome {
/**
* 父类的方法
*/
public void home() {
System.out.println("回家");
}
}
/**
* 子类Walk继承父类BackHome
* 步行回家
*/
class WalkBackHome extends BackHome {
/**
* 重写home()方法;
*/
@Override
public void home() {
System.out.println("步行回家");
}
}
/**
* 子类TakeBus继承父类BackHome
* 坐公交车回家
*/
class TakeBusBackHome extends BackHome {
/**
* 重写home()方法;
*/
@Override
public void home() {
System.out.println("坐公交车回家");
}
}
/**
* 子类TaxiBackHome继承父类BackHome
* 打车回家
*/
class TaxiBackHome extends BackHome {
/**
* 重写home()方法;
*/
@Override
public void home() {
System.out.println("打车回家");
}
}
/**
* 子类TaxiBackHome继承父类BackHome
* 打车回家
*/
class ByCarBackHome extends BackHome {
/**
* 重写home()方法;
*/
@Override
public void home() {
System.out.println("自驾回家");
}
}
class Test {
public static void main(String[] args) {
/**
* 多态方法,编译看左边,运行看右边
* 向上转型(父类引用指向子类对象)
*/
BackHome backHome1 = new WalkBackHome();
backHome1.home();
BackHome backHome2 = new TakeBusBackHome();
backHome2.home();
BackHome backHome3 = new ByCarBackHome();
backHome3.home();
BackHome backHome4 = new TaxiBackHome();
backHome4.home();
}
}
运行后结果如下:
可以看出,同样是回家也就是home()这个方法,在子类继承后,通过重写,就有不同的回家的方式,这就是多态。
版权声明:本文为weixin_44328257原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。