zoukankan      html  css  js  c++  java
  • 多态的使用意义

    1.多态(Polymorphism):就是父类型的引用能够指向子类型的对象。

    2.Parent p = new Child ();当使用多态调用方法时。首先检查父类有没有该方法,若有,则运行该方法;若没有,则编译错误。

    3.一共同拥有两种类型的强制类型转换:

    a) 向上类型转换(upcast):

    比方说将Cat类型转换为Animal类型,即子类型转换为父类型。对于向上类型转换。不须要显式使用强制类型转换。

    1.Cat  cat  = new Cat ();
    2.Animal animal = cat;
    第二行代码为向上类型转换。

    b)向下类型转换

    比方将Animal类型转换为Cat类型,即将父类型转换为子类型。对于向下类型转换,必需要显式使用强制类型转换。

    1.Animal a = new Cat();
    2.Cat cat = (Cat) a;
    第二行代码将Animal类型强制转换为Cat型。为向下类型转换。

    为什么要使用多态?


    public class PolyTest2
    {
        public void run(BMW bmw)                  
        {
            bmw.run();
        }
    
        public void run(QQ qq)
        {
            qq.run();
        }
    
        public static void main (String[] args)
        {
            PolyTest2 test = new PolyTest2();
            QQ qq = new QQ ();
            test.run (qq);
            BMW bmw = new BMW();
            test.run (bmw);
        }
    }
    
    class Car
    {
        public void run()
        {
            System.out.println ("car is runing");
        }
    }
    
    class BMW extends Car
    {
        public void run ()
        {
            System.out.println ("BMW is runing");
        }
    }
    
    class QQ extends Car
    {
        public void run ()
        {
            System.out.println ("QQ is runing");
        }
    }
     
    以上代码是不使用多态的情况,PolyTest2这个类中的run方法既要处理BWM类中的run方法,又要处理QQ类中的run方法,不使用多态的话就要针对不同的对象逐一定义方法。

    若一个类有非常多非常多子类,那么代码量是非常庞大的。因此。这时候多态就非常实用了。



    public class PolyTest2
    {
     /* 
        public void run(BMW bmw)
        {
            bmw.run();
        }
    
        public void run(QQ qq)
        {
            qq.run();
        }
            */
    <strong>
        public void run (<span style="color:#FF0000;">Car car</span>)
        {
            car.run();    
        }</strong>
    
        public static void main (String[] args)
        {
            PolyTest2 test = new PolyTest2();
            Car car = new QQ ();                               //Polymorphism
            test.run (car);
            
            BMW bmw = new BMW();
            test.run (bmw);                                   //use upcast
        }
    }
    
    class Car
    {
        public void run()
        {
            System.out.println ("car is runing");
        }
    }
    
    class BMW extends Car
    {
        public void run ()
        {
            System.out.println ("BMW is runing");
        }
    }
    
    class QQ extends Car
    {
        public void run ()
        {
            System.out.println ("QQ is runing");
        }
    }

    以上是使用多态的代码。在子类繁多的情况下就大实用处了。代码尽管简单,认真体会当中的妙处,对写高质量的代码应该会有帮助!



  • 相关阅读:
    杭电1466------简单的dp
    hdu2037-----------贪心, 活动安排问题
    两个钟表问题。
    杭电HDU1042(有点坑的高精度)
    hd1496---->这道题是水水的数论吗?
    LightOJ::1077 -----奇妙的最大公约数
    并查集练兵场
    欧拉函数
    位运算---水题
    矩阵快速幂
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/7263619.html
Copyright © 2011-2022 走看看