c#多态性的应用

server/2024/12/23 7:30:38/

设计一个电脑游戏,游戏中有猪、牛、兔子、青蛙、鸭子等动物,这些动 物都继承于Vertebrata 类(脊椎动物类),Vertebrata类有一个抽象方法Display(),每个动 物都从Vertebrata 类那里继承并重写了Display()方法,用来把动物本身画在屏幕上。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace DuTai
{internal class Program{static void Main(string[] args){// 声明一个基类(Vertebrata 类)的引用符数组Vertebrata[] animals = new Vertebrata[5];// 让每个引用符指向一个派生类对象animals[0] = new Pig();animals[1] = new Rabbit();animals[2] = new Cattle();animals[3] = new Frog();animals[4] = new Duck();//通用处理foreach (Vertebrata someone in animals){someone.Display();   //不论对象是什么类型,都使用相同的语句处理           }Console.ReadKey();}}//脊椎动物总类 abstract class Vertebrata{public abstract void Display();//抽象方法:绘图//其他成员//......; //......; }//哺乳动物(副总)类 class Mammal : Vertebrata{public override void Display()        //重写方法:绘图{}}//鸟类(副总类) ,继承于脊柱动物(总)类class Bird : Vertebrata{//重写方法:绘图 public override void Display(){}}//两栖动物(副总类),继承于脊柱动物(总)类class Amphibian : Vertebrata{//重写方法:绘图 public override void Display(){}}//猪类 ,继承于哺乳动物(副总)类 class Pig : Mammal{public override void Display()// //重写方法:绘图 {Console.WriteLine(@"  ╭︿︿☆╮ oοΟ {/ . .\}  ( (oo) )    ︶︶︶  我是笨猪我怕谁  ");}}//兔子类 ,继承于哺乳动物(副总)类class Rabbit : Mammal{//重写方法:绘图 public override void Display(){Console.WriteLine(@"  (\(\  /)/)  (-.-)(-.-) 小兔子乖乖");}}//牛类 ,继承于哺乳动物(副总)类class Cattle : Mammal{ //重写方法:绘图 public override void Display(){Console.WriteLine(@"   (___) (o o)____( @@ `     \          \ ____, / //    //  ^^    ^^    勤劳的牛");}}//青蛙类 ,继承于两栖动物(副总类)class Frog : Amphibian{//重写方法:绘图 public override void Display(){Console.WriteLine(@"   @..@ (\--/) (.>__<.) ^^^ ^^^ 青蛙王子");}}//鸭子类 ,继承于鸟类(副总类)class Duck : Bird{//重写方法:绘图 public override void Display(){Console.WriteLine(@"        __ >(' ) )/ /( / `----/ \ ~=- / ~^~^~^~^~^~^~^ 春江水暖鸭先知");}}}

启动程序:

程序中的foreach语句是 通用部分,Vertebrata 型引用符someone依次指向数组animals中的 对象,不管对象是哪种动物,都使用语句“someone.Display()”进 行绘图。系统根据 someone 指向的动物类型调用对应版本的 Display()方法。当添加一种新的动物时,只需要往数组里添加一个 对象,程序的通用部分不需要修改。 

继承和多态性是开发复杂软件的关键技术,特别适合于分层软 件系统。操作系统要处理各种各样的存储介质,比如硬盘、软盘、 U盘等等,这些硬件的具体工作原理显然是不同的,但它们都有读 和写两个操作。操作系统可以设计一个抽象基类,提供 Read()和 Write()两个抽象函数,各种硬件的驱动程序被编写为该抽象基类的 派生类,具体实现Read()和Write()操作。操作系统只需通过基类的 引用符调用Read()和Write()函数即可,不用关心在读取哪种存储介 质,更不用关心它们是怎么实现的。当有新设备产生以后,设备生 产厂家只需编写继承于抽象基类的驱动程序即可,不用更改操作系 统本身。


http://www.ppmy.cn/server/41629.html

相关文章

【Linux】自动化编译工具——make/makefile(超细图例详解!!)

目录 一、前言 二、make / Makefile背景介绍 &#x1f95d;Makefile是干什么的&#xff1f; &#x1f347;make又是什么&#xff1f; 三、demo实现【见见猪跑&#x1f416;】 四、依赖关系与依赖方法 1、概念理清 2、感性理解【父与子&#x1f468;】 3、深层理解【程序…

力扣HOT100 - 215. 数组中第K个最大元素

解题思路&#xff1a; 快速选择&#xff0c;目标是找出数组中第 k 小&#xff08;或第 k 大&#xff09;的元素&#xff0c;而不是对整个数组进行排序。 &#xff08;需要和快排进行区分&#xff0c;快排的目的是排序&#xff09; 注意&#xff1a; i l - 1, j r 1; 为什…

深入理解Dozzle:轻量级Docker日志查看工具

深入理解 Dozzle&#xff1a;轻量级 Docker 日志查看工具 Dozzle 是一个简易、轻量级的实时日志监控工具&#xff0c;它让用户能够在网页界面上监控 Docker 容器的输出&#xff0c;非常适合在不依赖复杂日志基础设施的场景下快速进行日志监控。本文将带您了解如何使用 Dozzle&a…

曲线救国:window 安装 docker

你好&#xff0c;我是 shengjk1&#xff0c;多年大厂经验&#xff0c;努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注&#xff01;你会有如下收益&#xff1a; 了解大厂经验拥有和大厂相匹配的技术等 希望看什么&#xff0c;评论或者私信告诉我&#xff01; 文章目录 一…

c++ 读写锁的理解

1.概要 读写锁的理解 读的时候&#xff0c;只要是读的线程都不受限制&#xff0c;但不能写。 写的时候&#xff0c;线程独占&#xff0c;任何写和读的线程都不可以。 最初我以为&#xff0c;只有限制写就可以了&#xff0c;读完全不受现在&#xff0c;但是有可能读到不完整的…

Java 程序员必备的 15 个框架集

Java 程序员方向太多&#xff0c;且不说移动开发、大数据、区块链、人工智能这些&#xff0c;大部分 Java 程序员都是 Java Web/后端开发。那作为一名 Java Web 开发程序员必须需要熟悉哪些框架呢&#xff1f; d8f18202405131220599753.png 1.Spring 毫无疑问&#xff0c;Spri…

Java的类和对象(一)—— 初始类和对象,this关键字,构造方法

前言 从这篇文章开始&#xff0c;我们就进入到了JavaSE的核心部分。这篇文章是Java类和对象的第一篇&#xff0c;主要介绍类和对象的概念&#xff0c;this关键字以及构造方法~~ 什么是类&#xff1f;什么是对象&#xff1f; 学过C语言的老铁们&#xff0c;可以类比struct自定义…

MYSQL:MySQL 事务隔离级别详解

一、MySQL事务是什么&#xff1f; MySQL事务是一组在数据库中执行的操作&#xff0c;这些操作要么全部成功执行&#xff0c;要么全部不执行&#xff0c;以确保数据库的完整性和一致性。 事务的 ACID 事务具有四个特征&#xff1a;原子性&#xff08; Atomicity &#xff09;、…