• Java面向对象之多态


       多态,字面意思:多种状态,就好比有很多个类继承了同一个类Test,我们可以传一个Test类型的参数,而这个Test类型参数的引用可以根据不同情况指向任意一个继承于Test类的子类。这就是多态。我们不用每次都调用子类具体的实现方法,只需要修改父类参数引用指向的对象即可。

    public class FruitTest  extends Plant
    {
        public void giveName()
        {
            System.out.println("FruitTest");
        }
        public static void main(String[] args)
        {
            args = new String[]{"0","1"};
            
            Plant plant = new Plant();
            plant.giveName();
            plant.printName();
            
            Plant plant1 = new FruitTest();//父类的引用可以指向子类的对象,那么就可以称之为多态
            FruitTest t = (FruitTest) plant1;//plant1引用指向了一个FruitTest对象,所以可以将一个FruitTest对象的引用t指向plant1;向下强制类型转换。有约束条件。
            t.giveName();
            
            VegetablesTest v = new VegetablesTest();
            Plant p = v;//向上强制类型转换,因为v引用指向了一个VegetablesTest对象,VegetablesTest类继承于Plant类,所以Plant对象的引用p可以指向v;
            p.giveName();
            
            Plant p1 = null;
            if("0".equals(args[0]))
            {
                p1 =  new FruitTest();
            }
            else if("1".equals(args[0]))
            {
                p1 = new VegetablesTest();
            }
            p1.giveName();
        }
    }
    class Plant
    {
        public void giveName()
        {
            System.out.println("plant");
        }
        public void printName()
        {
            System.out.println("print");
        }
    }
    class VegetablesTest extends Plant
    {
        public void giveName()
        {
            System.out.println("Vegetables");
        }
    }

    输出结果如下:

    plant
    print
    FruitTest
    Vegetables
    FruitTest

    另外一个类子:


    public class Exemple
    {
         public static  void test(A a)
         {
             a.test();
         }
          public static void main(String[] args)
        {
            A a = new B();
            test(a);
        }
    }
    class A
    {
        public void test()
        {
            System.out.println("A");
        }
    }
    class B extends A
    {
        public void test()
        {
            System.out.println("B");
        }
    }
    class C extends A
    {
        public void test()
        {
            System.out.println("C");
        }
    }


    输出结果如下:

    B

    总结:多态的实质就是父类的引用可以指向任意子类的对象。

  • 相关阅读:
    vue中@事件处理函数的柯里化
    一个例子生动理解js的原型_js的原型prototype和__protopy__区别
    vue3自定义v-model
    js初始化一个特定值的array
    dom的clientHeight、scrollHeight以及offsetHeight
    ts踩坑记录
    常见问题1
    资料share
    几种开放源码的TCPIP协议栈
    阻塞与非阻塞,同步与异步
  • 原文地址:https://www.cnblogs.com/MedivhQ/p/3801418.html
Copyright © 2020-2023  润新知