C# 繼承 虛方法

繼承

虛方法 (重寫)

virtual 虛方法的關鍵字 ?

override 重寫的關鍵字?

練習:


繼承

繼承:很多類有相似的數據 ?相同的屬性 相同的方法 ?也有不同的 ?這個時候就可以使用繼承 讓多個類去繼承自某個具有相同數據的基類(父類) 這樣在子類中就不用再定義這些相同的數據了

優點:便于維護代碼 數據相同的類 只要需要在基類(父類)中定義即可 然后讓擁有相同數據的派生類(子類)去繼承這個父類就可以了 ? 后期修改數據的時候 只需要修改父類中的定義就可以了

多重繼承(多繼承): 可以有多個基類 每個子類都可以選擇繼承哪個基類 但是不能同時繼承多個基類 ?c# 是不支持多重繼承的 ?如果要完成這種模式 使用接口接口?

//定義一個基類(父類)
internal class Boss
{public int HP { get; set; }public int SP { get; set; }public void Move(){Console.WriteLine("移動");}public  void BossAi(){Console.WriteLine("大招");}
}
//實現繼承: ( : Boss )這樣就代表了 當前這個Class1這個類 繼承了 Boss類 
//Boos就是基類(父類) Class1就是派生類(子類)   父類中的數據成員 方法成員 在子類中也可以使用internal class Class1 : Boss
{//以下注釋部分可以省略,因為在父類Boss中已經存在//public int HP { get; set; }//public int SP { get; set; }//public void Move()//{//    Console.WriteLine("移動");//}//public void Ai()//{//    Console.WriteLine("普攻");//}// 小兵 自己的數據public double Heigth { get; set; }public void minAi(){Console.WriteLine("Min攻擊");}}
//Class2繼承Class1
internal class Class2 :Class1
{}
static void Main(string[] args)
{Boss b = new Boss();b.HP = 100;b.SP = 100;Class1 c1 = new Class1();c1.HP = 100;//Class1  繼承Boss類之后的操作    第一個繼承Boss的子類Class1 c2 = new Class1();c2.HP = 100;Console.WriteLine(c2.HP);c2.Move();c2.minAi();//Class2 第一個繼承Class1的子類,第二個繼承Boss的子類Class2 c3 = new Class2();c3.Move();c3.HP = 100;Console.WriteLine(c3.HP);c3.BossAi();c3.minAi();
}

虛方法 (重寫)

virtual 虛方法的關鍵字 ?

?將方法升級為虛方法 ?然后就可以在子類中重寫邏輯了 ?在子類中重寫之后 就屬于子類的邏? 輯 ?父類中的不會改變

internal class Boss
{public int HP { get; set; }public int SP { get; set; }              public virtual void Move(){Console.WriteLine("Boss只能左右移動");}public void AI(){Console.WriteLine("大招");}
}

override 重寫的關鍵字?

如果想要重寫父類中的某個方法邏輯 那么父類中的方法就可以升級為虛方法 ?然后在子類中對其進行重寫。如果父類中的方法沒有聲明為虛方法 子類就不能重寫

internal class Class1 :Boss
{public override void Move(){Console.WriteLine("小怪隨意移動");}//隱藏方法public new void AI(){Console.WriteLine("普通攻擊");}
}
 static void Main(string[] args){Class1 c1 = new Class1();//子類中重新父類Move方法之后的方法c1.Move();}

練習:

現在 有 火車 ?飛機 ?輪船 汽車 幾個類 ?屬性有: ?價格 速度 核載人數 ?方法有: 運行方式 ?到站方式 運用繼承與虛方法 重寫的形式 將它們各自的狀態 完善

 static void Main(string[] args){Car a = new Car();steamship b=new steamship();plane c=new plane();a.Price = 20;   a.Speed = 60;    a.Peoplenum = 5;a.Run ();   a.Stop ();  a.show ();b.Price = 2000; b.Speed = 1000; b.Peoplenum = 50;b.Run();    b.Stop();   b.show();c.Price = 1000;    c.Speed = 800;   c.Peoplenum = 100;c.Run();    c.Stop();   c.show();}
//定義一個交通工具的基類
internal class vehicle
{public int Price { get; set; }public int Speed { get; set; }public int Peoplenum { get; set; }public virtual void Run() { }public virtual void Stop() { }public void show() { Console.WriteLine($"價格:{Price} 速度:{Speed} 核載人數:{Peoplenum}"); }}
//汽車
internal class Car : vehicle
{public override  void Run() { Console.WriteLine("起步"); }public override void Stop() { Console.WriteLine("熄火"); }}
 //輪船internal class steamship : vehicle{public override void Run() { Console.WriteLine("漂流"); }public override void Stop() { Console.WriteLine("拋錨"); }}
 //飛機internal class plane: vehicle{public override void Run() { Console.WriteLine("飛行"); }public override void Stop() { Console.WriteLine("降落"); }}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/90221.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/90221.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/90221.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java 堆(優先級隊列)

文章目錄優先級隊列模擬實現優先級隊列向下調整建堆向上調整建堆堆的刪除priorityQueue構造方法大根堆和小根堆的向上調整比較方法擴容面試題堆排序優先級隊列 priorityqueue:底層是一顆完全二叉樹 小根堆:根比左右孩子都小大根堆:根比左右…

在.NET Core API 微服務中使用 gRPC:從通信模式到場景選型

目錄 一、gRPC 基礎:為什么它適合微服務? 二、gRPC 的四種通信模式及.NET Core 實現 1. 一元 RPC(Unary RPC):最基礎的請求 - 響應模式 2. 服務器流式 RPC(Server Streaming RPC)&#xff1…

HTML零基礎快速入門教程(詳細篇)

本文詳細介紹HTML零基礎快速入門的基礎知識,包括HTML的介紹、語言的一些實際作用、語法規范注意,如標簽結構、標簽屬性、大小寫不敏感等,還介紹了HTML文件的具體書寫規則,如文件擴展名、文檔類型聲明和HTML結構以及具體的一些HTML…

LLM評測框架Ragas:SQL指標(解決了Ollama推理框架不支持的問題)

SQL類的度量指標是指運行SQL后的結果和預期之間的一個度量值。 datacompy score datacompy score 使用DataCompy(一個比較pandas的數據格式的python類,所以需要按照datacompy:pip install datacompy),默認是按照rows比較,也可以設置按照columns比較,這個事通過mode參數…

ubuntu24 ros2 jazzy

安裝2 software & update 選擇其它 安裝 一、前提準備 檢查操作系統版本: 確保你的系統版本是Ubuntu 24.04。你可以通過運行lsb_release -a命令來檢查當前的系統版本。 設置UTF-8支持: ROS 2需要UTF-8編碼支持。你可以通過以下命令來檢查和設置UTF…

設備虛擬化技術

設備虛擬化技術概述設備虛擬化技術通過軟件模擬物理硬件設備,使多個操作系統或應用程序能夠共享同一臺物理設備。它廣泛應用于云計算、服務器整合和測試環境等領域。核心目標是提高資源利用率、隔離性和靈活性。?當接入的用戶數增加到原交換機端口密度不能滿足接入…

開發避坑短篇(3):解決@vitejs plugin-vue@5.0.5對Vite^5.0.0的依賴沖突

異常信息 # npm resolution error reportWhile resolving:system3.8.8 Found: vite6.2.3 node_modules/vitedev vite"6.2.3" from the root projectCould not resolve dependency: peer vite"^5.0.0" from vitejs/plugin-vue5.0.5 node_modules/vitejs/plu…

k8s快速部署(親測無坑)

文章目錄k8s快速部署(親測無坑)一、網絡劃分二、CentOS7設置 標題固定IP和阿里云YUM源三、主機環境配置四、虛擬機的拷貝五、安裝docker(每臺主機都需要安裝)六、安裝kubelet,kubeadm,kubectl(每臺機器都需要執行)遇到的問題參考文檔k8s快速部署&#xf…

簡易RAG問答引擎的構建與體驗

RAG(檢索增強生成)是結合檢索與生成式 AI 的技術框架。核心邏輯是先從外部知識庫精準檢索相關信息,再將其作為上下文輸入大模型生成回答。技術上依賴檢索引擎(如向量數據庫、BM25)、大語言模型(如 GPT、LLa…

C++11特性學習 Day1

nullptr對于c中null (void*)0,所以在為函數傳參傳入0時,無法清楚地分辨是int類型的0還是指的是空指針null在C11中清晰的將空指針變為了nullptr,0專指int型的數字0override關鍵字在子類中對父類的函數的覆寫之后加上override關鍵字&#xff0…

微算法科技(NASDAQ: MLGO)探索優化量子糾錯算法,提升量子算法準確性

隨著量子計算技術的飛速發展,量子計算機在解決復雜計算問題上的潛力日益顯現。然而,量子計算面臨的一個重大挑戰是量子比特的脆弱性,即量子比特容易受到環境噪聲和干擾的影響,導致量子態的塌縮和計算結果的錯誤。微算法科技&#…

MongoDB數據庫詳解-針對大型分布式項目采用的原因以及基礎原理和發展-卓伊凡|貝貝|莉莉

MongoDB數據庫詳解-針對大型分布式項目采用的原因以及基礎原理和發展-卓伊凡|貝貝|莉莉由于老產品即時通訊私有化軟件就是采用MongoDB ,但是版本實在太低,要做大更新,其次針對10年前完美運營的項目來到10年后的現在就不一定行,優雅…

Kotlin 中的單例模式(Singleton)與對象聲明

在 Kotlin 中,類描述的是一種通用結構,可以多次實例化,也可以用多種方式實例化。但有時我們只需要單個實例,不多不少。單例模式能幫你更好地組織代碼,把相關的方法聚合在一起。 單例模式是什么? 單例模式是…

Shell 編程基礎入門從認識到實戰

對于剛接觸 Linux 或 Unix 系統的開發者來說,Shell 腳本往往是自動化操作的第一道門檻。它不像 Python 那樣語法簡潔,也不像 Java 那樣有完善的面向對象體系,但卻能以極少的代碼實現強大的系統管理功能。本文將從 Shell 的基本概念講起&#…

混合遺傳粒子群算法在光伏系統MPPT中的應用研究

混合遺傳粒子群算法在光伏系統MPPT中的應用研究 前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家,覺得好請收藏。點擊跳轉到網站。 摘要 本文針對光伏系統最大功率點跟蹤(MPPT)問題&#xff0…

機器視覺的布料絲印應用

在紡織印染行業,布料絲印工藝的精度直接決定產品外觀質量與市場競爭力。傳統絲印設備依賴機械定位與人工校準,面對高密度圖案、柔性面料或復雜紋理時,易出現套色偏移、油墨滲透不均等問題,導致良品率波動與生產成本攀升。 隨著機…

前端常用類庫

常用類庫 類庫作用 類庫可以幫助我們快速實現項目業務的開發與功能的實現, 幫助我們解放勞動力提高生產效率, 前端中的類庫與框架都是由原生javascript編寫, 提供給其他開發者應用于某一業務環境或者需求。一般有開發者/團隊開源維護. 優秀的類庫需要具備高度封裝可用, 穩定, …

通俗易懂循環神經網絡(RNN)指南

本文用直觀類比、圖表和代碼,帶你輕松理解RNN及其變體(LSTM、GRU、雙向RNN)的原理和應用。什么是循環神經網絡 循環神經網絡(Recurrent Neural Network, RNN)是一類專門用于處理序列數據的神經網絡。與前饋神經網絡不同…

【SVM】支持向量機實例合集

基于Java的SVM(支持向量機)實例合集 以下是一個基于Java的SVM(支持向量機)實例合集,包含核心代碼示例和應用場景說明。這些例子基于流行的機器學習庫(如LIBSVM、Weka、JSAT)實現。 數據準備與加載 使用LIBSVM格式加載數據集: // 加載LIBSVM格式數據 svm_problem pr…

Python100個庫分享第38個—lxml(爬蟲篇)

目錄專欄導讀📚 庫簡介🎯 主要特點🛠? 安裝方法Windows安裝Linux/macOS安裝驗證安裝🚀 快速入門基本使用流程HTML vs XML解析🔍 核心功能詳解1. XPath選擇器2. CSS選擇器支持3. 元素操作🕷? 實戰爬蟲案例…