介面 抽象類 抽象方法 虛方法 的區別

2021-05-22 09:27:44 字數 2078 閱讀 7117

介面、抽象類、抽象方法、虛方法 的區別

介面、抽象類、抽象方法、虛方法:

這四個名詞時非常容易混淆的:

首先說一下介面 與抽象類 的異同:

相同點:

1.他們都不能例項化自己,也就是說都是用來被繼承的。

2.抽象類中的抽象方法和介面方法一樣,都不能有方法體

不同點:

1.抽象類裡可以有欄位,介面中不能有欄位.

2.抽象類中的普通方法可以有方法體,而介面方法沒有方法體。

3.介面中的方法不能有訪問修飾符,抽象類中的抽象方法被繼承,需要override重寫 .

4.介面更像是一種規範,一種約束。

5.乙個子類只能繼承乙個抽象類,但卻可以繼承多個介面。

接下來是抽象方法 和虛方法 的異同:

其實可以把抽象方法看做是沒有方法體的虛方法。

相同點:

1.抽象方法和虛方法都可以被重寫。

不同點:

1.abstract 和virtual的關鍵字不同

2.抽象方法一定沒有方法體,而虛方法可以有方法體。

下面寫個例子說明一下:

view plaincopy to clipboardprint?

///

/// 乙個手機的抽象類  

///

public abstract class mobilephone   

set   

}  

public abstract void call();  

public virtual void callagain()   

}  

///

/// 定義乙個實體類,繼承了乙個抽象類及多個介面  

///

public class nokia :mobilephone,iclock,ilistenmusic  

public void clock()  

public void listenmusic()  

public override void callagain()   

}  

///

/// 下面定義了兩個介面,為了說明可以繼承多個介面  

///

public inte***ce ilistenmusic   

public inte***ce iclock     

再補充乙個小例子,

這裡有到很有意思的面試題,說名了new關鍵字和override的區別:

view plaincopy to clipboardprint?

class program  

}  

public class a5  

public virtual void methodb()  

}  

public class b5 :a5  

最後的答案是:"a5.methoda"

示例說明:

new是覆蓋override是過載。  

「覆蓋」並不意味著「刪除」  

示例  

using   system;  

class   a  

}  

class   b:   a  

}  

class   test  

}  

輸出為  

b.f  

a.f  

但「過載」意味著「刪除」,這就是「覆蓋」和「過載」的區別。  

示例  

using   system;  

class   a  

}  

class   b:   a  

}  

class   test  

}  

輸出為  

b.f  

b.f  

介面 抽象類 抽象方法 虛方法 的區別

首先說一下介面 與抽象類 的異同 相同點 1.他們都不能例項化自己,也就是說都是用來被繼承的。2.抽象類中的抽象方法和介面方法一樣,都不能有方法體 不同點 1.抽象類裡可以有欄位,介面中也可以有欄位.2.抽象類中的普通方法可以有方法體,而介面方法沒有方法體。3.介面中的方法不能有訪問修飾符,抽象類中...

虛方法,抽象類 ,介面

抽象類不能被例項化 只能宣告方法,不能實現,只能有他的 是乙個隱式的虛方法 抽象類裡的方法不能是私有的 如果抽象是私有的,那麼他的子類訪問不了它 在抽象方法中使用static和virtual修飾符是錯誤的 在靜態屬性中使用abstract是錯誤的 abstract方法只能在抽象類中宣告 而virtu...

抽象方法 抽象類 介面 介面和抽象類的區別

某個父類只知道子類因該包含什麼樣的方法,無法知道這些子類如何實現這些方法。抽象類包含該方法但沒有對該方法的具體實現。有抽象方法的類只能被定義為抽象類,抽象類裡可以沒有抽象方法。抽象方法和抽象類的規則 public abstract class shape private string color p...