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

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



  • 相关阅读:
    用TortoiseSVN忽略文件或文件夹(ignore)(网络摘抄记录)
    GridView解决同一行item的高度不一样,如何同一行统一高度问题?
    解决android studio引用远程仓库下载慢(转)
    Databinding在自定义ViewGroup中如何绑定view
    (转 )【Android那些高逼格的写法】InvocationHandler与代理模式
    (转)秒懂,Java 注解 (Annotation)你可以这样学
    View拖拽 自定义绑定view拖拽的工具类
    bcrypt对密码加密的一些认识(学习笔记)
    Node.js+Koa开发微信公众号个人笔记(三)响应文本
    Node.js+Koa开发微信公众号个人笔记(二)响应事件
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/7263619.html
Copyright © 2011-2022 走看看