首页 > 编程语言 >C#基础学习------多态

C#基础学习------多态

时间:2024-07-28 11:07:43浏览次数:15  
标签:C# 子类 void 多态 class override ------ 方法 Display

虚方法

​ 在父类中,使用virtual关键字声明一个虚方法。虚方法可以有默认的实现。

子类中的重写方法

​ 在子类中,使用override关键字重写父类的虚方法。重写的方法可以有不同的实现。

using System;

class BaseClass
{
    // 基类中的虚方法
    public virtual void Display()
    {
        Console.WriteLine("BaseClass Display method");
    }
}

class DerivedClass : BaseClass
{
    // 派生类中重写虚方法
    public override void Display()
    {
        Console.WriteLine("DerivedClass Display method");
    }
}

class Program
{
    static void Main()
    {
        BaseClass baseObj = new BaseClass();
        baseObj.Display(); // 调用基类的方法

        DerivedClass derivedObj = new DerivedClass();
        derivedObj.Display(); // 调用派生类的方法

        // 多态性
        BaseClass polyObj = new DerivedClass();
        polyObj.Display(); // 调用派生类的方法
    }
}

输出:

BaseClass Display method
DerivedClass Display method
DerivedClass Display methoda

注意:

​ 虚方法的重写必须使用override关键字。

​ 如果父类在内存中指向的子类对象的方法,有override关键字。程序会跳过父类的方法,执行被override修饰的方法,如果指向的子类没有,则执行父类的方法

抽象

抽象类和抽象方法

抽象类

​ 抽象类是使用abstract关键字修饰的类,不能实例化,只能被继承。抽象类通常用于定义一组方法和属性,强制子类实现这些方法和属性。

抽象方法

​ 抽象方法是使用abstract关键字修饰的方法,没有方法体,只能在抽象类中声明,必须在非抽象派生类中实现。这些方法定义了子类必须实现的行为。

using System;

abstract class Animal
{
    // 抽象方法,子类必须实现
    public abstract void MakeSound();

// 普通方法
public void Sleep()
{
    Console.WriteLine("Sleeping...");
}

}

class Dog : Animal
{
    // 实现抽象方法
    public override void MakeSound()
    {
        Console.WriteLine("Bark");
    }
}

class Cat : Animal
{
    // 实现抽象方法
    public override void MakeSound()
    {
        Console.WriteLine("Meow");
    }
}

class Program
{
    static void Main()
    {
        Animal myDog = new Dog();
        myDog.MakeSound(); // 输出:Bark
        myDog.Sleep(); // 输出:Sleeping...

​    Animal myCat = new Cat();
​    myCat.MakeSound(); // 输出:Meow
​    myCat.Sleep(); // 输出:Sleeping...
}

}

标签:C#,子类,void,多态,class,override,------,方法,Display
From: https://www.cnblogs.com/catlon/p/18327967

相关文章

  • 关于MP4文件在ue4中导出的方式
    关于ue中使用播放器播放影片,在打包后,发现无法播放的解决办法:在打包设置中引入以下设置,当然GPROGame.mp4 在/game/gprogames/GPROgames.mp4,这里只用复制名称 打包后会有这个目录: 当然此时在播放的时候是正常的我们直接用 我们也可以做如下设置:这个时候打包会有这个......
  • AtCoder Beginner Contest 364 补题记录(A~F)
    VP五十八分钟苏童流体。好耶A#defineGLIBCXX_DEBUG#include<iostream>#include<cstring>#include<cstdio>#defineintlonglongconstintN=500100;std::strings[N];signedmain(){intn,cnt=1;scanf("%lld",&n);f......
  • 【模板】图论
    图论\(k\)短路圆方树intn,nn;struct{ Vie[N]; voidadde(intx,inty){e[x].pb(y),e[y].pb(x);}}tr;struct{ intind,dfn[N],low[N]; boolcut[N]; Vie[N]; voidtarjan(intrt,intu){ staticintt,s[N]; dfn[u]=low[u]=++ind,s[++t]=......
  • Scratch作品-巴黎2024奥运会
    ​《Scratch作品-巴黎2024奥运会》是一款以巴黎2024年奥运会为主题的互动作品,专为儿童和青少年设计。通过Scratch编程语言,这个作品生动地再现了奥运会的精彩瞬间,结合了动画、声音和互动元素,让用户仿佛置身于巴黎的奥运赛场。玩家可以参与各种虚拟的奥运项目,学习奥运精神,了解各国......
  • 使用 python matplotlib 和 metpy 添加辅助 y 轴
    我知道这个问题似乎与这里的许多其他问题类似,但我已经尝试过它们,不幸的是它们都没有解决我在尝试添加辅助y轴时当前面临的问题。问题是很简单,但我找不到任何可以修复它的东西:在SkewT图上添加辅助y轴会更改图的y限制,而不仅仅是添加轴。基本上,我希望添加辅......
  • Windows版MySQL8.4.2LTS解压直用(下载免安装-绿色-项目打包直接使用-含卸载)
    文章目录下载地址选择GPL选择server选择8.5.2LTS长期服务版配置解压配置环境变量初始化新建my.ini配置root密码安装mysql启动mysql服务使用mysql登陆mysql修改mysql密码设置客户端可连接远程MySQL服务器修改host为值为”%“执行语句:updateusersethost='%'where......
  • Python实现基于卷积神经网络的恶意代码分类系统(设计思路概述)
    这个设计是关于一个基于卷积神经网络(CNN)的恶意代码分类系统,其主要目标是对恶意代码进行自动分类,帮助用户识别并防范不同类型的恶意软件。以下是该系统的设计思路、方法及实现过程的详细解释:设计思路恶意代码图像化:由于直接对恶意代码的源代码或二进制形式进行分类难度较......
  • 数据集成工具之kettle
    Kettle是一个用于数据集成的开源工具,由Pentaho开发,现已由HitachiVantara维护。Kettle的全名是PentahoDataIntegration(PDI),主要用于数据提取、转换和加载(ETL)过程。1.核心组件Spoon:图形化的设计工具,用于创建和测试ETL作业和转换。用户可以通过拖放界面来设计......
  • 【SQL 新手教程 3/20】关系模型 -- 外键
    ......
  • AIGC技术在创意设计行业的应用与影响
    引言随着人工智能技术的迅速发展,AIGC(ArtificialIntelligenceGeneratedContent,人工智能生成内容)已成为创意设计行业的一个重要趋势。AIGC不仅可以提高设计效率,还能激发设计师的创造力,推动设计领域的创新。本文将探讨AIGC技术在创意设计中的具体应用,并通过一个基于Python的简......