1. 程式人生 > 其它 >實現多型之介面

實現多型之介面

介面

是一種規範,是一種約定,約定必須要具備的功能

接口裡邊的方法預設都是公共的,預設都是抽象的,所以定義的時候只需要定義返回值方法名引數,public和abstract會自動加上。

介面的特點

1、介面中的成員不能有任何實現(“光說不做”,只是定義了一組未實現的成員),接口裡邊的方法都是抽象的,不能有方法體。

2、為了多型,介面不能被例項化。

3、介面中只能有方法、自動屬性、索引器、事件,不能有“欄位”和建構函式。

4、介面與介面之間可以繼承,並且可以多繼承。

5、只要一個類繼承了一個介面,這個類就必須實現這個介面中所有的成員

6、介面並不能去繼承一個類,而類可以繼承介面

7、一個類可以同時繼承一個類並實現多個介面,如果一個子類同時繼承了父類A,並實現了介面IA,那麼語法上A必須寫在IA的前面,因為類是單繼承的。
class MyClass:A,IA{}


介面和抽象類的異同點:

相同點:都是一種約定,約定必須要具備的功能。繼承抽象類必須要重寫裡邊所有的抽象方法,實現介面也必須實現接口裡邊的方法。

不同點:
1:接口裡邊不能有普通方法,但是抽象類可以
2:抽象類只能單一的繼承,介面是可以多實現的


介面基本使用

public interface IFlyble
    {
        void Fly();
    }



    public class brid : IFlyble
    {
        public void Fly()
        {
            Console.WriteLine("我是鳥,我可以飛");
        }
    }

介面的多繼承

public interface M1
    {
        void Test1();
    }


    public interface M2
    {
        void Test2();
    }


    public interface M3
    {
        void Test3();
    }


    public interface SuperM : M1, M2, M3
    {

    }


    public class Person : SuperM
    {

        public void Test1()
        {

        }

        public void Test2()
        {

        }

        public void Test3()
        {

        }

    }

顯示實現介面

顯示實現介面的目的:解決方法的重名問題
什麼時候顯示的去實現介面:
當繼承的藉口中的方法和引數一摸一樣的時候,要是用顯示的實現介面

//介面
    public interface IFlyable
    {
        void Fly();
    }



    public class Brid : IFlyable
    {

        public void Fly()
        {
            Console.WriteLine("我是鳥自己的飛");

        }

        //顯示實現介面
        void IFlyable.Fly()
        {
            Console.WriteLine("我是介面的飛");
        }
    }

呼叫的時候根據里氏轉換給之類即可

IFlyable brid = new Brid();

            //呼叫介面的飛
            brid.Fly();

            //呼叫自己的飛
            ((Brid)brid).Fly();