天天看點

C#中抽象類與抽象方法的詳解一.抽象類:二.抽象類的規則:三.抽象方法:四.應用舉例:五.抽象類的運用意義;六.總結:

前言:在上一篇博文關于重寫的前提說明中提到了,那麼今天我們一起來看看抽象類以及抽象方法…,首先我們順着目錄從抽象類的介紹開始學習:

目錄:

  • 一.抽象類:
    • 1.聲明形式(建立抽象類):
    • 2.抽象類的調用:
  • 二.抽象類的規則:
  • 三.抽象方法:
  • 四.應用舉例:
  • 五.抽象類的運用意義;
  • 六.總結:

一.抽象類:

抽象類:往往用來表征對問題領域進行分析、設計中得出的抽象概念,是對一系列看上去不同,但是本質上相同的具體概念的抽象,在面向對象的C#程式設計語言中,通常用

abstract

來進行聲明它是一個抽象類;

1.聲明形式(建立抽象類):

舉例,我們建立一個父類,它擁有一個方法:

abstract class Father//抽象類關鍵字abstract
    {
        public void Run()
        {
            Console.WriteLine("我是抽象類我會跑,也會跳");
        }
     }
           

謹記:在抽象方法聲明中不能使用

static

virtual

修飾符!!!

原因請看圖:

C#中抽象類與抽象方法的詳解一.抽象類:二.抽象類的規則:三.抽象方法:四.應用舉例:五.抽象類的運用意義;六.總結:
C#中抽象類與抽象方法的詳解一.抽象類:二.抽象類的規則:三.抽象方法:四.應用舉例:五.抽象類的運用意義;六.總結:

2.抽象類的調用:

abstract class Father//抽象類關鍵字abstract
    {
        public void Run()
        {
            Console.WriteLine("我是抽象的父類我會跑,也會跳");
        }
     }
     class Son:Father//繼承抽象類
    {}
    class Program
    {
        static void Main(string[] args)
        {
        Son son = new Son();
        son.Run();
        Console.ReadLine();
       }
     }
           

運作結果:

C#中抽象類與抽象方法的詳解一.抽象類:二.抽象類的規則:三.抽象方法:四.應用舉例:五.抽象類的運用意義;六.總結:

也許會有小夥伴會疑惑為什麼不去執行個體化這個名為"Father"的抽象類呢?下面我們來說說抽象類的規則:

二.抽象類的規則:

1. 不能建立一個抽象類的執行個體:

如果我們這樣寫是錯誤的,為什麼呢,來看看:

C#中抽象類與抽象方法的詳解一.抽象類:二.抽象類的規則:三.抽象方法:四.應用舉例:五.抽象類的運用意義;六.總結:

2. 不能在一個抽象類外部聲明一個抽象方法:

C#中抽象類與抽象方法的詳解一.抽象類:二.抽象類的規則:三.抽象方法:四.應用舉例:五.抽象類的運用意義;六.總結:

3.不能用

sealed

關鍵字來修飾抽象類:

通過在類定義前面放置關鍵字

sealed

,可以将類聲明為密封類。當一個類被聲明為

sealed

時,它不能被繼承。抽象類不能被聲明為

sealed

。不能用

sealed

修飾符修飾抽象類,因為這兩個修飾符的含義是相反的。 采用

sealed

修飾符的類無法繼承,而

abstract

修飾符要求對類進行繼承:

C#中抽象類與抽象方法的詳解一.抽象類:二.抽象類的規則:三.抽象方法:四.應用舉例:五.抽象類的運用意義;六.總結:

4.抽象類中可以聲明正常函數:

C#中抽象類與抽象方法的詳解一.抽象類:二.抽象類的規則:三.抽象方法:四.應用舉例:五.抽象類的運用意義;六.總結:

三.抽象方法:

抽象方法隻允許在抽象類中進行聲明!

舉例:

abstract class Father//抽象類關鍵字abstract
    {
      public abstract  int Abb();//方法
    }
           

在抽象類中進行聲明後,必須在子類的繼承中進行

override

,否則就會報錯!!,同理屬性也是如此!!

C#中抽象類與抽象方法的詳解一.抽象類:二.抽象類的規則:三.抽象方法:四.應用舉例:五.抽象類的運用意義;六.總結:

四.應用舉例:

完整舉例代碼:

abstract class Father//抽象類關鍵字abstract
    {
        public void Run()
        {
            Console.WriteLine("我是抽象的父類我會跑,也會跳");
        }
        public abstract  int Abb();//方法
        public abstract int  SS{ get; }//屬性
    }
     class Son :Father
    {
        public override int SS
        {
            get { return 1; }
        }
         public void Jump(int a)
        {
            Console.WriteLine("我是第{0}個子類",a);
        }
        public override int Abb()
        {
            Console.WriteLine("我是第{0}抽象方法",SS);
            return (1);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
           Son son = new Son();
            son.Run();
            son.Abb();
            son.Jump(1);
            Console.ReadLine();
         }
     }
           

運作結果:

C#中抽象類與抽象方法的詳解一.抽象類:二.抽象類的規則:三.抽象方法:四.應用舉例:五.抽象類的運用意義;六.總結:

五.抽象類的運用意義;

在面向對象方法中,抽象類主要用來進行類型隐藏。構造出一個固定的一組行為的抽象描述,但是這組行為卻能夠有任意個可能的具體實作方式。這個抽象描述就是抽象類,而這一組任意個可能的具體實作則表現為所有可能的派生類;

六.總結:

1. 抽象類中的抽象屬性和抽象方法必須是公有的,是以必須有

public

修飾符;

2. 子類必須

override

抽象類中的所有抽象屬性和抽象方法,如果沒有全部

override

,那麼子類必須是抽象類;

3. 抽象類中可以有非抽象屬性和非抽象方法,也可以是私有或者公有,但是如果是私有的話子類就不能通路,無意義,是以一般情況下都設定為公有

public

通路修飾符;

4. 有抽象方法或抽象屬性的類一定是抽象類,抽象類中的屬性或方法不一定都是抽象的;

5. 對抽象類不能使用new關鍵字,也不能被密封,原因是抽象類不能被執行個體化,不能被密封,因為抽象類要求對類進行繼承;

6. 抽象類應主要用于關系密切的對象;

7.從抽象類派生的非抽象類必須包括繼承的所有抽象方法和抽象通路器的實作;

繼續閱讀