【傻傻分不清楚】C#抽象類和接口

1.抽象類

特徵:

1.被abstract修飾

2.不能直接實例化

3.不能用Sealed或者private或者protected修飾

4.包含抽象方法,也可包含非抽象方法

5.抽象方法沒有方法體,且必須非私有

6.子類繼承抽象類,必須重寫所有非私有抽象方法

舉個栗子:

定義一個人類的抽象類

    abstract class Person
    {
        private int age=12;
        public int Age
        {
            get { return age; }
            set { age = value; }
        }
        public string name = "張三";
        
        protected abstract void Speak();//說話

        public abstract string Eat(string foodName);//喫
     }

派生類繼承抽象類

 class Chinese : Person
    {

        protected override void Speak()
        {
            Console.WriteLine("我說中文");
        }

        public override string Eat(string foodName)
        {
            return foodName;
        }

    }
測試結果:

 static void Main()
        {
            Chinese chinese = new Chinese();//實例化派生類
            Person person = chinese;//也可以將對象賦值給父類
            int age = chinese.Age;
            Console.WriteLine("年齡:{0},姓名:{1},食物:{2}",age,chinese.name,chinese.Eat("餃子"));
            Console.ReadKey();
        }

2.接口

特徵:

1.接口成員總是共有的,所以申明是不允許使用修飾符,即使public

2.可多繼承接口,用,隔開

3.接口方法沒有方法體

4.成員不能有字段,意思是成員不能以;結尾

5.不能直接實例化

同樣舉個栗子:

接口1

interface Interface1
    {
        int Add();//加法
    }

接口2

  interface Interface2
    {
        int Add();

        int a{get;set;}
    }

實現兩個接口

class Chinese : Person,Interface2,Interface1
    {
 public int Add()
        {
            a = 6;
            return a;
        }

        int A;
        public int a
        {
            get { return A; }
            set { A = value; }
        }
        
}

3.區別

3.1相同點

1.都不能直接實例化

2.抽象方法和接口方法都沒有方法體

3.派生類必須實現全部抽象成員、接口成員


3.2不同點

1.(抽象)類可以實現一個或多個接口,接口不能繼承類。

2.接口不能申明字段,抽象類可以

3.派生類必須實現接口所有成員,但只需重寫抽象類的抽象方法

4.抽象類屬於類,有構造方法和析構函數。接口沒有

5.抽象類方法簽名可以是protected或者public。接口方法隱式爲public

6.抽象類可以有靜態方法

7.抽象類主要用於關係密切的對象;而接口適合爲不相關的類提供通用功能。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章