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

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



  • 相关阅读:
    SSAS aggregation 的作用及其使用
    liblinear使用总结
    python绝对路径相对路径函数
    libsvm使用总结
    一次scrapy成功停止的信息
    简单总结scrapy使用方法
    python编码格式
    一次scrapy失败的提示信息:由于连接方在一段时间后没有正确答复或连接的主机没有反 应,连接尝试失败
    17.1 MySQL主从介绍 17.2 准备工作 17.3 配置主 17.4 配置从 17.5 测试主从同步
    16.1 Tomcat介绍 16.2 安装jdk 16.3 安装Tomcat
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/7263619.html
Copyright © 2011-2022 走看看