c 虛方法和抽象方法的使用

2021-10-09 04:41:32 字數 2094 閱讀 5516

虛方法

虛方法存在於相對於需要實現多型的子類的父類當中,同時也是實現多型的最基本的方法。

具體語法:父類的方法,用virtual修飾,表示虛方法。繼承它的子類,在內部用override進行重寫。

下面進行案例分析:

貓和狗都是動物,他們都會叫,但是叫聲不一樣。提取出相同的部分,即叫聲,將叫聲實現為多型。

新建父類:animal,新建子類cat、dog,**如下:

}/// /// 動物類

///

public class animal

}/// /// 貓類

///

public class cat : animal

}/// /// 狗類

///

public class dog : animal

}} 執行結果:

抽象方法和抽象類

抽象方法和抽象類的關鍵字都是:abstract

如果父類的方法很抽象,而且沒有具體的do(做什麼)即方法體,必須要子類進行重寫才有實際意義的話,這種情況就需要用抽象方法了。

例項**:

}/// /// 動物類

///

public abstract class animal

/// /// 貓類

///

public class cat : animal

}/// /// 狗類

///

public class dog : animal

}} 執行結果:

抽象方法,必須存在於抽象類當中。相反,抽象類中不一定全部是抽象方法。比如我們可以在裡面寫上普通方法,有實現的虛方法或者沒有實現的虛方法都可以。抽象方法沒有方法體,繼承了抽象類的子類,必須實現父類的所有的抽象方法。

在虛方法中,假如子類需要完成多型的表現,而父類的方法實際上也有實際意義,那父類可以選擇實現,等需要子類重寫的時候去重寫實現呼叫,父類的方法暫時沒有實際意義,也可以不用具體實現。所以,父類的虛方法可以實現(有方法體),也可以不實現(沒有方法體)。而抽象方法必須通過子類的重寫來實現。

抽象類使用場景:

1.父類方法不知道如何去使用

2.父類沒有預設實現,而且不需要例項化

總的來說:抽象方法和虛方法差不多,實現的功能都差不多。抽象類保證了所有的抽象方法必須得到重寫,而虛方法可以根據需要來選擇是否進行重寫。

介面:inte***ce

裡面有乙個未實現的方法。下面定義乙個惠普印表機實現類,繼承自介面iprinter 

例項完整**:

}/// /// 列印接介面

///

public inte***ce iprint

/// /// 惠普印表機類

///

class hpprinter : iprint

}} 執行結果:

介面定義了所有類繼承介面時應遵循的語法合同。介面定義了語法合同"是什麼"部分,派生類定義了語法合同"怎麼做"部分。

例如上面例項中,介面iprint定義了乙個印表機(是什麼),派生類hpprinter說明了是惠普印表機列印檔案(怎麼做)。

介面定義了屬性、方法和事件,這些都是介面的成員。介面只包含了成員的宣告。成員的定義是派生類的責任。介面提供了派生類應遵循的標準結構。介面使得實現介面的類或結構在形式上保持一致。

抽象類在某種程度上與介面類似,但是,它們大多只是用在當只有少數方法由基類宣告由派生類實現時。

C 虛方法和抽象方法

虛方法 1 virtual方法表示此方法可以被重寫,也就是說這個方法具有多型.父類中的方法是通用方法,可以在子類中重寫以重新規定方法邏輯.2 virtual方法可以直接使用,和普通方法一樣 3 不是必須重寫的.子類可以使用base.方法 的方式呼叫,無論有沒有在子類使用override去重寫 vir...

C 虛方法和抽象方法

虛方法 1 virtual方法表示此方法可以被重寫,也就是說這個方法具有多型.父類中的方法是通用方法,可以在子類中重寫以重新規定方法邏輯.2 virtual方法可以直接使用,和普通方法一樣 3 不是必須重寫的.子類可以使用base.方法 的方式呼叫,無論有沒有在子類使用override去重寫 vir...

C 虛方法和抽象方法

當子類方法和父類方法相同時,可以隱藏基類方法,也可以用虛方法,這時子類就可以重寫父類的方法了,這就是類的多型形式,重寫還可以用在抽象方法中,並且是抽象方法的類就必須重寫,虛方法和抽象方法都能讓子類重寫,它們之間有什麼區別呢?類的方法名可以和父類的方法名重名,但是會報綠線,為了解決這個問題可以在子類方...