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

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

原文地址:https://www.cnblogs.com/MedivhQ/p/4074996.html