c#---多態

在 C#語言中體現多態有三種方式:虛方法,抽象類, 接口


一、虛方法

  1. 什么是虛方法
    在父類中使用 virtual 關鍵字修飾的方法, 就是虛方法。在子類中可以使用 override 關鍵字對該虛方法進行重寫。
class Animal
{public virtual void Speak(){Console.WriteLine("***********");}
}class Dog:Animal
{public override void Speak(){base.Speak();Console.WriteLine("汪汪汪");}public void Type(){Console.WriteLine("我是一只狗");}
}class Cat : Animal
{public override void Speak(){base.Speak();Console.WriteLine("喵喵喵");}public void Type(){Console.WriteLine("我是一只貓");}
}
  1. 何為里氏轉換
    ①子類對象可以直接賦值給父類
Cat cat = new Cat();
Animal ann = cat;
cat.Speak();
cat.Type();
ann.Speak();
//報錯,無法執行,ann.Type();

②如果父類中裝的是子類對象,那么可以將該父類強制轉為子類對象

Animal ani = new Dog();
ani.Speak();
//報錯,無法執行,ani.Type();
Dog dog = (Dog)ani;
dog.Type();

③這里我們用的是強制類型轉換,也可以使用is 和 as 轉換

is: 如果轉換成功, 返回 true, 失敗返回 false;
as: 如果轉換成功, 返回對應的對象, 失敗返回 null

Animal ani = new Dog();
if(ani is Dog)
{Dog dog = ani as Dog;dog.Type();
}else if (ani is Cat)
{Cat cat = ani as Cat;cat.Type();
}

二、抽象方法

  1. 抽象方法的返回值類型前用關鍵字abstract修飾,且無方法體。

public abstract void Hello();

  1. 抽象方法必須存在于抽象類中。

abstract class Animal

在定義類的關鍵字class前面加 abstract 修飾的類就是抽象類。
子類繼承抽象類,使用 override 關鍵字重寫父類中所有的抽象方法

  1. 抽象類中不一定要有抽象方法, 但是抽象方法必須存在于抽象類中。
    抽象類不能被實例化, 因為抽象類中有抽象方法(無方法體)。

三、接口語法

  1. 抽象類到接口,當抽象類中所有的方法都是抽象方法的時候,這個時候可以把這個抽象類用另外,一種形式來表現,這種形式叫接口。

  2. 接口使用 interface 關鍵字定義,沒有 class 關鍵字,接口名一般使用 “IXxxx”

  3. 接口中定義的方法不能有方法體,全是抽象方法,但又不需要用 abstract 修飾;

  4. 接口中的成員不允許添加訪問修飾符,默認都是 public;

一個類可以實現多個接口,被實現的多個接口之間用逗號分隔開。
一個接口可以繼承多個接口, 接口之間也要用逗號分隔。
類與類之間只能單繼承。

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

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

相關文章

android apk沒有源碼如何修改程序

如果您擁有一個APK文件但沒有源代碼,您可以嘗試以下幾種方法來進行修改: 反編譯APK:使用工具如apktool對APK文件進行反編譯,這將為您提供源代碼和資源文件。 動態調試:使用調試工具連接設備或模擬器,并動態…

重裝前端整體流程

用戶管理 --匯總 -- 明細-CSDN博客 一、node 這個看環境變量 2023最新版Node.js下載安裝及環境配置教程(非常詳細)從零基礎入門到精通,看完這一篇就夠了_nodejs安裝及環境配置-CSDN博客 配置到國內鏡像的時候,去看,淘…

理解固化的Maven依賴:spring-boot-starter-parent 與 spring-boot-dependencies

目錄 理解固化的Maven依賴:spring-boot-starter-parent 與 spring-boot-dependencies1. spring-boot-starter-parent1.1 簡介1.2 特點 2. spring-boot-dependencies2.1 簡介2.2 特點 3. 異同點對比3.1 相同點3.2 不同點案例一:使用 spring-boot-starter-…

Java方法的重載

方法重載 1. 為什么需要方法重載 public class TestMethod{public static void main (String[] args){int a 10;int b 20;int ret add(a,b);System.out.println("ret "ret);double a2 10.5;double b2 20.5;double ret2 add(a2,b2);System.out.println("…

《QT實用小工具·六十二》基于QT實現貝塞爾曲線畫炫酷的波浪動畫

1、概述 源碼放在文章末尾 該項目實現了通過貝塞爾曲線畫波浪動畫,可控制 顏色密度速度加速度 安裝與運行環境 語言:C 框架:Qt 11.3 平臺:Windows 將屏幕水平平均分為10塊,在一定范圍內隨機高度的12個點(…

飛天使-k8s知識點29-kubernetes安裝1.28.0版本

文章目錄 選用版本初始化服務器,自己修改里面的ipreboot haproxy安裝 ,可以參考我之前寫的內核參數調整,安裝docker 安裝cri-dockerd開始安裝集群工具下載鏡像以及啟用完畢之后 此時的coredns 不通結果展示 選用版本 k8s 1.24版本之前還可以使用docker&…

【初階數據結構】順序表OJ題講解

前言 📚作者簡介:愛編程的小馬,正在學習C/C,Linux及MySQL。 📚本文收錄與初階數據結構系列,本專欄主要是針對時間、空間復雜度,順序表和鏈表、棧和隊列、二叉樹以及各類排序算法,持…

基于ambari hdp的kafka用戶授權讀寫權限

基于ambari hdp的kafka用戶授權讀寫權限 版本Kafka 2.0.0添加自定義配置修改admin密碼重啟kafka授權讀取授權寫入有效通配符部分舉例 版本Kafka 2.0.0 添加自定義配置 authorizer.class.name kafka.security.auth.SimpleAclAuthorizer super.users User:admin allow.everyo…

【LLM 論文】Step-Back Prompting:先解決更高層次的問題來提高 LLM 推理能力

論文:Take a Step Back: Evoking Reasoning via Abstraction in Large Language Models ???? Google DeepMind, ICLR 2024, arXiv:2310.06117 論文速讀 該論文受到的啟發是:人類再解決一個包含很多細節的具體問題時,先站在更高的層次上解…

Android 屏幕適配全攻略(上)-掌握屏幕單位,應對千變萬化的設備

本文從 Android 開發中常見的長度單位 px、dp、sp 入手,詳細介紹了它們的特點及轉換關系。 接著深入探討了屏幕尺寸、分辨率、像素密度等重要的屏幕指標,幫助讀者全面理解它們之間的聯系。最后,通過實例代碼演示了如何在代碼中進行單位轉換&…

三分鐘上手安全滲透系統Kali Linux

kali linux系統集成了常用的安全滲透工具,省去了安裝工具的時間,做安全相關的工作是非常推薦使用的。 安裝Kalii Linux 安裝系統 一般使用虛擬機進行安裝,Kali Linux基于Debian內核,虛擬機的操作系統選擇Debian 7.x 64 選擇系統…

【SRC實戰】一鍵完成全部任務獲取獎勵

挖個洞先 https://mp.weixin.qq.com/s/LkPfJuuP1K8vaFXRn-8wVg “ 以下漏洞均為實驗靶場,如有雷同,純屬巧合 ” 01 — 漏洞證明 一、業務邏輯 “ 如何欺騙APP完成任務獲取獎勵? ” 1、記錄金幣數量20 2、瀏覽商品詳情頁 3、點擊瀏覽提…

我們應該如何做參與式觀察

記得多年以前,有個朋友問我:對于做觀察,有人通過教授繪畫技巧來教人如何做觀察。你們研究員又不會畫畫,你們如何讓人相信你們更會觀察呢?坦率說,當時我被問住了,因為我從來沒有進行過這樣的對比…

day5Qt作業

服務器端 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//準備組件,初始化組件狀態this->setFixedSize(800,600);chatwidget new QListWidge…

代碼隨想錄算法訓練營第四十九天| 123.買賣股票的最佳時機III,188.買賣股票的最佳時機IV

目錄 題目鏈接:123.買賣股票的最佳時機III 思路 代碼 題目鏈接:188.買賣股票的最佳時機IV 思路 代碼 總結 題目鏈接:123.買賣股票的最佳時機III 思路 與之前買賣股票不同的是本題要求最多買賣兩次,那么dp數組以及遞推公式都…

攻擊者正在利用AI,對保險公司發起大規模欺詐

保險欺詐一直是保險行業面臨的重要挑戰之一,尤其隨著技術的進步,欺詐者也在不斷更新其手段,利用AI技術,包括生成式模型、機器學習和數據分析工具等欺騙保險公司,而AI技術的應用正成為他們的新工具,使其犯罪…

如何打造個人IP?

打造個人IP(Intellectual Property)是當今社會中越來越受到關注的話題。個人IP指的是個人在某個領域內所擁有的獨特的、具有商業價值的知識、技能、品牌和影響力。為什么要打造個人IP?如何打造個人IP?下面我將為您詳細解答。 首先…

Navicat連接遠程數據庫時,隔一段時間不操作出現的卡頓問題

使用 Navicat 連接服務器上的數據庫時,如果隔一段時間沒有使用,再次點擊就會出現卡頓的問題。 如:隔一段時間再查詢完數據會出現: 2013 - Lost connection to MySQL server at waiting for initial communication packet, syste…

LinkedList鏈表

LinkedList 的全面說明 LinkList底層實現了雙向鏈表和雙端隊列特點可以添加任意元素(元素可以重復),包括null線程不安全,沒有實現同步 LinkedList 的底層操作機制 LinkedList底層維護了一個雙向鏈表LinkList中維護了兩個屬性fi…

【算法入門賽】A.坐標變換(推薦學習)C++題解與代碼

比賽鏈接:https://www.starrycoding.com/contest/8 題目描述 武漢市可以看做一個二維地圖。 牢 e e e掌握了一項特異功能,他可以“瞬移”,每次瞬移需要分別設定 x x x和 y y y的偏移量 d x dx dx和 d y dy dy,瞬移完成后位置會…