实用指南: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("降落"); }
}
posted @ 2025-07-27 12:58  wzzkaifa  阅读(15)  评论(0)    收藏  举报