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

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.lryc.cn/news/597882.html

相关文章:

  • linux性能调整和故障排查
  • Python进阶知识之pandas库
  • 前端开发 React 状态优化
  • 面向对象分析与设计40讲(7)设计原则之合成复用原则
  • 前端实现可编辑脑图的方案
  • 网络编程初识(详细易懂)
  • 嵌入式linux下的NES游戏显示效果优化方案:infoNES显示效果优化
  • Python进阶知识之pandas库(一)基础数据类型
  • Android热修复实现方案深度分析
  • Android root和完整性检测实现方案深度分析
  • 海信IP501H-IP502h_GK6323处理器-原机安卓9专用-TTL线刷烧录可救砖
  • HTTPS证书体系,证书加密流程(通信体系)
  • lumerical——光纤布拉格光栅(Fiber Bragg gratings)
  • Linux 或者 Ubuntu 离线安装 ollama
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 主页-最近七天微博发布量实现
  • pig cloud框架中引入websocket
  • 车载绝缘子放电状态检测系统数据分析软件需求说明书
  • python自动化测试框架,封装方法方式
  • WebGIS 常用坐标系
  • 日语学习-日语知识点小记-构建基础-JLPT-N3阶段(8):自動詞 & 他動詞 「~ている」「~ておく」「~てある」
  • 【西北工业大学公开课】导引系统原理(全61讲)周军 -个人笔记版 5000字
  • JVM、Dalvik、ART垃圾回收机制
  • 大模型就业方向
  • OpenCV(02)图像颜色处理,灰度化,二值化,仿射变换
  • 【学习笔记】机器学习(Machine Learning) | 第七章|神经网络(3)
  • 解决sparksql创建出来的数据库路径错误的问题
  • VSCode 开发 STM32 - clangd 带来的极致补全体验
  • 13. event.target 和 event.currentTarget 区别
  • 加载用户设置时遇到错误找到一个带有无效“icon“的配置文件。将该配置文件默认为无图标。确保设置“icon“时,该值是图像的有效文件路径“
  • ElasticSearch基础数据查询和管理详解