什么是多態?為什么用多態?有什么好處?多態在什么地方用?


什么是多態?

概念:同一操作作用於不同的對象,可以有不同的解釋,產生不同的執行結果,這就是多態性。簡單的說:就是用基類的引用指向子類的對象。

 

為什么要用多態呢?

原因:我們知道,封裝可以隱藏實現細節,使得代碼模塊化;繼承可以擴展已存在的代碼模塊(類);它們的目的都是為了——代碼重用。而多態除了代碼的復用性外,還可以解決項目中緊偶合的問題,提高程序的可擴展性.。耦合度講的是模塊模塊之間,代碼代碼之間的關聯度,通過對系統的分析把他分解成一個一個子模塊,子模塊提供穩定的接口,達到降低系統耦合度的的目的,模塊模塊之間盡量使用模塊接口訪問,而不是隨意引用其他模塊的成員變量。

 

多態有什么好處?

有兩個好處:

1. 應用程序不必為每一個派生類編寫功能調用,只需要對抽象基類進行處理即可。大大提高程序的可復用性。//繼承 
2. 派生類的功能可以被基類的方法或引用變量所調用,這叫向后兼容,可以提高可擴充性和可維護性。 //多態的真正作用,

 

多態在什么地方用?

可以用在方法的參數中和方法的返回類型中。

在方法中的參數,請看下面的例子:

   public abstract class Driver
    {
        public void run();//讓子類來運行
    }


class SBenz : Driver
    {
        public void run()
        {
            Console.WriteLine("Benz在以200邁的速度在run");
        }
    }




 class JD : Driver
    {
        public void run()
        {
            Console.WriteLine("JD is running...");
        }
    }


 class Person
    {
        private Driver driver;
        public Person()
        {

        }
        public Person(Driver driver)
        {
            this.driver = driver;
        }
        public void drive()
        {
            driver.run();
        }
        public void setDriver(Driver driver)
        {//運用參數多態,以后不管買什么車都可以
            this.driver = driver;
        }
   }




static void Main(string[] args)
        {
            Person p = new Person();
            JD jd = new JD();//剛開始沒錢就買輛JD吧
            p.setDriver(jd);
            p.drive();
            SBenz benz = new SBenz();//有錢換車了
            p.setDriver(benz);
            p.drive();
        }

 

在方法的返回類型中,請看下面的例子:

上面的例子中,不管是JD還是Benz都是我們自己直接new出來的.我們可以設計一個工廠類,專門生成汽車

/**
*   我們將多態使用在方法的返回類型中
*   Driver可以是抽象類,也可以是接口,JD和Benz分別繼承該類或實現該借口

*/

 public class CarFactory
    {
        public Driver factory(String carName)
        {
            if (carName.Equals("JD"))
            {
                return new JD();
            }

            else if (carName.Equals("Benz"))
            {
                return new SBenz();
            }

            else
            {
                Console.WriteLine("對比起,不伺候");
                return null;
            }
        }
    }

這實際上就是設計模式中的簡單工廠模式!

類型的參數.,傳入參數的時候,可以傳入任何一個類的對象,只要是對應的類的對象名稱就可以了
這就是多態的應用!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM