抽象類和接口區別


一、緒論

  unity 3D主要是以C#語言為基礎開發,據說Unity 3D有80%的開發者在使用C#。C#以其強大的邏輯編程能力,被unity開發的大型項目采用。雖然C#萬般好,但是用好C#首先要用好面向對象。當年大學里學過Java,但是基本上就是混吃等死的水平。現在在學習unity的時候需要把面向對象技術重新再學習一次,當然是以C#語言為基礎。

=========================小框架沒寫完,先寫一部分這個博客=================================

二、抽象類

public abstract class parent{

    public abstract string getName();
}

一個簡單的抽象 類。我們很多時候在編寫基類的時候不想去考慮基類的方法實現,只想去定義一些方法,等到具體用的時候再去實現,這時候就可以使用抽象類。這就好比你家族有門手藝,但是不告訴你怎么做,只告訴你是這樣子的,你需要自己去想辦法做出來。這就是抽象類。在編寫的時候需要將類的定義前加上abstract關鍵字,在方法名前面也加上關鍵字,保證抽象類的結構。

抽象類的使用的話,子類需要去實現抽象類定義的方法,不然這門手藝就失傳了。當然在編程中,你必須要去實現這些方法。

復制代碼
public class clild1:parent{

    public override string getName ()
    {
        return "xiaozhang";
    }
}
public class clild2:parent{
    
    public override string getName ()
    {
        return "xiaoli";
    }
}
復制代碼

兩個孩子繼承了這門手藝,並通過自己獨特的方法實現了。

抽象類通過這種方法可以限定住這一類的屬性。

三、接口

接口和抽象類一樣,我們在定義接口的時候希望只定義接口的名稱或者說方法,但是不定義方法的內容。比方說,水管有很多種,但是都有一個共同的方法,一個共同的接口就是有入水口和出水口。那么在定義水管的接口的時候我只定義有個出水口和有個進水口,但是口徑大小和樣式我不定義,具體定義留給具體的水管。

public interface WaterPipe{
    public int InWater();
    public int OutWater();
}

但是事實上,我只定義類接口,那么不是水管有入水口、出水口,其他的東西有這兩種功能的都能繼承這個接口,比如河流。

復制代碼
public class river:WaterPipe{
    public int InWater(){
        return 9;
    }
    public int OutWater(){
        return 9;
    }
}
復制代碼

在C#中,接口定義只是作為一種屬性存在,而不是像類的繼承那么嚴格。同一個類可以繼承多個接口,但是只能繼承一個父類。這就是只能有一個父親,但是你可以有很多其他屬性,比如精通物理,精通鋼琴。

四、兩者區別

抽象類和接口看起來還是相似很多的但是細細理解的話發現里面還是有很多不一樣的。

這里把這些異同整理一下:

相同:

1、都能被繼承

2、繼承的類都必須將未實現的函數實現

3、只關注方法的定義,不關注方法的實現

差異:

1、一個子類可以繼承多個接口,但是只能繼承一個父類

2、抽象類在對象中只能表示一種對象,接口可以被很多對象繼承

五、Unity3D中的使用

在Unity 3D中,實際上和C#使用相同,只是將不同的接口和抽象類使用合理能夠幫助很好的管理游戲資源。


免責聲明!

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



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