什么是多态?

烂大街的一句话是:多态是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版权协议,转载请附上原文出处链接和本声明。