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");
        }
    }

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



  • 相关阅读:
    剑指OFFER----面试题17- 打印从1到最大的n位数
    剑指OFFER----面试题16. 数值的整数次方
    剑指OFFER----面试题15. 二进制中1的个数
    剑指OFFER----面试题14- II. 剪绳子II
    07 多层if判断
    08 while循环
    06 if 流程控制
    03 身份运算符、逻辑运算符
    04 位运算符、运算符优先级
    02 赋值运算符、成员运算符
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/7263619.html
Copyright © 2011-2022 走看看