zoukankan      html  css  js  c++  java
  • 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

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

  • 相关阅读:
    原型模式(Prototype Pattern) 资料合集
    建筑者 & 生成器模式 (Builder Pattern) 资料合集
    CodeProject每日精选: Dialogs and Windows
    CodeProject每日精选: Edit Controls (TextBox, RichTextBox)
    抽象工厂资料汇总
    CodeProject每日精选 Winform Combo and Listboxes
    CodeProject每日精选: Date/Time controls 控件推荐
    Winform按钮推荐 2007.3.8
    hdu 2200
    hdu 1143总结
  • 原文地址:https://www.cnblogs.com/MedivhQ/p/3801418.html
Copyright © 2011-2022 走看看