類(抽象類與非抽象類)和接口


一、抽象類:類是一個具有相同特征和行為的抽象,而抽象類(class 前加上 abstract)沒有指出行為的具體細節,而由他的子類去實現相應的行為。

注意:一個非密封類(密封類使用 sealed 修飾)可以派生子類,子類可以是抽象類或非抽象類。

下面給出示例:

public abstract class BB
{
 
    public int a;
    public void GetNum()
    {
        
    }
    public abstract void GetHeight();
 
 
}
// 抽象類可以繼承自抽象類,不必實現父類的抽象方法
public  abstract  class DD:BB
{
    // 自己的抽象方法
    public abstract int GetMoney();
 
}
// 非抽象類繼承自抽象類 BB,必須實現(需要加上重寫關鍵字:override ) BB 的都有抽象方法
public    class EE:BB
{
    public override void GetHeight()
    {
 
    }
 
}
抽象類與非抽象類的區別:

1、抽象類使用 abstract 修飾,可以被繼承但不能被實例化(可以引用子類實例化對象),子類繼承自抽象類后必須實現該類的所有抽象方法;

2、抽象類中可以有抽象方法和非抽象方法,非抽象類不能有抽象方法,抽象方法一定要被子類重寫,而其他方法沒要求。

二、接口:當使用類的時候,僅關注其行為,不關心繼承時可以使用接口來代替類。

下面給出示例:

// 抽象類
public abstract class AbsClass
{
    // 實例字段 a
    public int a;
    // 只讀屬性 B
    public string B{get;}
    // 抽象方法  
    public abstract  void Test();
}
public class  SubClass:AbsClass
{
    // 重寫父類的抽象方法
    public override void Test()
    {
 
    }
 
}
// 接口中的成員是隱式公有的,不能加修飾符
public  interface IMyInterface
{
    // 只讀屬性
    int AA{get;}
    // 方法
    void Test();
 
}
注意:接口的意義就是公共行為的載體,所以他的成員都是隱式公有的,不能加上修飾符。
下面給出調用的示例:

// 父類的引用指向子類的實例化對象
AbsClass aa = new SubClass();
// 調用子類重寫后的方法
aa.Test();
抽象類和接口的區別:

1、抽象類中可以有實現成員(非抽象方法),而接口中的方法只有聲明沒有實現;

2、抽象類中可以有字段,接口中不能有字段,但可以有屬性;

3、抽象類的成員可以使用公有或其他修飾符,接口中成員是隱式公有的,不需要修飾;

4、抽象類是概念的抽象,接口注重行為,抽象類不支持多重繼承,而一個類可以實現多個接口。
--------------------- 
作者:cloproad 
來源:CSDN 
原文:https://blog.csdn.net/cloproad/article/details/78965488 
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!


免責聲明!

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



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