虛方法
虛方法存在於相對於需要實現多型的子類的父類當中,同時也是實現多型的最基本的方法。
具體語法:父類的方法,用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 虛方法和抽象方法
當子類方法和父類方法相同時,可以隱藏基類方法,也可以用虛方法,這時子類就可以重寫父類的方法了,這就是類的多型形式,重寫還可以用在抽象方法中,並且是抽象方法的類就必須重寫,虛方法和抽象方法都能讓子類重寫,它們之間有什麼區別呢?類的方法名可以和父類的方法名重名,但是會報綠線,為了解決這個問題可以在子類方...