C#继承实战:关于类的继承和子类构造函数的相关习题

**一,定义一个Animal类,拥有Name、MaxAge(最大寿命)、NowAge(当前的年龄,生成对象时随机设置)、Sex,

一个Dog类,继承自Animal类,拥有Speak方法,发出汪汪汪的声音 ,一个Cat类,继承自Animal类,拥有Speak方法,发出喵喵喵的声音**

代码实现:

namespace Zy
{
internal class Program
{
static void Main(string[] args)
{

Animal a1 = new Animal();
a1.Name = "余伟";
a1.NowAge = 20;
Console.WriteLine(a1.Name+a1.NowAge);

Dog d1 = new Dog();
d1.Name = "哮天犬";
d1.NowAge = 20;
d1.MaxAge = 30;
d1.Sex = "公";
Console.WriteLine(d1.Name+" "+d1.NowAge+" "+d1.MaxAge+" "+d1.Sex);
d1.Speak();

Cat c1 = new Cat();
c1.Name = "小猫咪";
c1.NowAge = 10;
c1.Sex = "母";
c1.MaxAge = 30;
Console.WriteLine(c1.Name+ " " + c1.NowAge+ " " + c1.MaxAge+ " " + c1.Sex);

c1.Speak1();

Console.ReadKey();
}
}
class Animal
{
public string Name { get; set; }
public int MaxAge { get; set; }
public int NowAge { get; set; }
public string Sex { get; set; }
public Animal()
{

}

}
class Dog : Animal
{
public void Speak()
{
Console.WriteLine("发出汪汪汪的声音 ");
}
}
class Cat : Animal
{
public void Speak1()
{
Console.WriteLine("发出喵喵的声音 ");
}

}
}

二, 一个怪物类,拥有HP血量、name名字、防御力,发动攻击的方法、被攻击的方法(接收被攻击的数值,减去自身血量)

一个Boos类,继承怪物类,拥有发大招的能力

namespace Yv
{
internal class Program
{
static void Main(string[] args)
{

//创建俩个怪物对象
Monster m1 = new Monster(100, "阿萨拉小兵", 10, 20);
Monster m2 = new Monster(200, "阿萨拉盾兵", 20, 50);

//怪物发动攻击
m1.发动攻击(); // 攻击力20
m2.发动攻击();// 50

//m1被m2揍了 传递m2的攻击力 50
m1.被揍(m2.Att);
m1.被揍(m2.Att);
m1.被揍(m2.Att);
m1.被揍(m2.Att);

Boss SYD = new Boss(5000, "赛伊德", 100, 100);
SYD.发动攻击();
m2.被揍(SYD.Att);
m2.被揍(SYD.Att);
m2.被揍(SYD.Att);
SYD.被揍(m1.Att);
SYD.Skil();

Console.ReadKey();
}
}
class Monster
{
public int HP { get; set; } //血量
public string Name { get; set; } // 名称
public int Def { get; set; } //防御

public int Att { get; set; }// 攻击力

public Monster()
{

}
public Monster(int h, string n, int d, int a) //血量 名称 防御 攻击力
{
HP = h;
Name = n;
Def = d;
Att = a;
}
public void 发动攻击()
{
Console.WriteLine(this.Name + "发动了攻击,攻击力是:" + this.Att);
}

public void 被揍(int a)//传递一个攻击力
{

//if (HP < 0) // 怪物的血量0
//{

// return;
//}
if (a - Def < 0) //伤害小于0
{
Console.WriteLine("Miss");
return;
}
//当前剩余血量
//a - Def 攻击力-减去防御力 = 实际伤害
HP -= (a - Def);
if (HP < 0) // 剩余的血量为0
{

Console.WriteLine("血量为0 已经嘎了 不要在鞭尸了");
}
else
{
Console.WriteLine("造成伤害{0},剩余{1}血量", a - Def, HP);
}

}
}
class Boss : Monster
{

public Boss(int h, string n, int d, int a) : base(h, n, d, a)//血量 名称 防御 攻击力
{

}

public void Skil()
{
Console.WriteLine(this.Name + "发出一个技能: 龙卷风摧毁停车场");
}

}

}

运行结果:

相关推荐
cike_y9 小时前
Mybatis-万能的Map&模糊查询
java·开发语言·mybatis·安全开发
郝学胜-神的一滴9 小时前
Linux的pthread_self函数详解:多线程编程中的身份标识器
linux·运维·服务器·开发语言·c++·程序人生
HUST9 小时前
C 语言 第七讲:数组和函数实践:扫雷游戏
c语言·开发语言·数据结构·vscode·算法·游戏·c#
oioihoii9 小时前
C++高并发编程核心技能解析
开发语言·c++
jimy19 小时前
程序崩溃free(): double free detected in tcache 2
linux·开发语言·数据结构·链表
秋邱9 小时前
Java面向对象进阶:封装、继承、多态的实现逻辑与实战案例
java·开发语言·后端·spring cloud·ar·restful
colman wang9 小时前
Java期末
java·开发语言
千里马-horse9 小时前
AsyncContext
开发语言·前端·javascript·c++·napi·asynccontext
Coder_Boy_9 小时前
基于MQ实现秒杀订单系统的异步化架构
java·开发语言·架构