当前位置: 首页 > ds >正文

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.xdnf.cn/news/16227.html

相关文章:

  • idea部署新项目时,用自定义的maven出现的问题解决
  • QMC5883L 坐标系Z轴是垂直于芯片平面向下(芯片朝上时指向地面)还是垂直于芯片平面向上(芯片朝上时指向天空)
  • Qt内存管理的核心点
  • 游戏盾 在线游戏的终极防护屏障
  • 【2025目标检测】最新论文
  • 2025年Zigbee技术白皮书:全球物联网无线通信的关键创新
  • 深度学习的Logits:logist 是什么,上一维度的隐藏向量怎么获取
  • 基于GitHub的Terraform自动化管理最佳实践
  • rust嵌入式开发零基础入门教程(四)
  • 第一章:Go语言基础入门之Hello World与Go程序结构
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 主页-微博点赞量Top6实现
  • Https以及CA证书
  • 基于php的校园招聘平台
  • SpringCloud seata全局事务
  • Matlab学习笔记:逻辑基础
  • 【数学建模 | Matlab】二维绘图 和 三维绘图
  • CLI 与 IDE 编码代理比较:提升开发效率的两种路径
  • 使用Docker搭建SearXNG搜索引擎
  • 直播一体机技术方案解析:基于RK3588S的硬件架构特性​
  • 地理类专业选择指南:地理科学/测绘工程/遥感科学与技术
  • 基于LNMP分布式个人云存储
  • Docker详解及实战
  • 274款古装人物头像
  • 20250704-基于强化学习在云计算环境中的虚拟机资源调度研究
  • DeepSeek 助力 Vue3 开发:打造丝滑的日历(Calendar),日历_家庭维护示例(CalendarView01_31)
  • 性能测试-jmeter实战5
  • 【无标题】word 中的中文排序
  • 字节 AI 编辑器 Trae 2.0 SOLO 出道! 国际版不充分指南及与国内版的对比
  • 腾讯云推出CodeBuddy:革新AI全栈开发体验
  • Xorg占用显卡内存问题和编译opencv GPU版本