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 + "发出一个技能: 龙卷风摧毁停车场");
}

}

}

运行结果:

相关推荐
曦夜日长3 分钟前
C++ STL容器string(一):string的变量细节、默认函数的认识以及常用接口的使用
java·开发语言·c++
代码中介商6 分钟前
C++ STL 标准模板库完全指南:从容器到迭代器
开发语言·c++·stl
winner88818 分钟前
C++ 构造函数、析构函数、虚函数、虚析构
开发语言·c++
北山有鸟10 分钟前
IS_ERR 判断出错后,再用 PTR_ERR 把它强制转换回 int 型的错误码作为函数的返回值。
java·开发语言
格林威14 分钟前
工业视觉检测:提供可视化UI调试工具的实现方式是什么?
开发语言·人工智能·数码相机·ui·计算机视觉·视觉检测·工业相机
phltxy16 分钟前
深度解析:Spring Cloud Gateway 从入门到实战
java·开发语言
AI进化营-智能译站25 分钟前
ROS2 C++开发系列08-传感器数据缓存与指令解析方式之数组、向量与字符串实战
开发语言·c++·缓存·ai
shjita31 分钟前
记录java执行中的一个错误细节
java·开发语言
AI进化营-智能译站38 分钟前
ROS2 C++开发系列14-Lambda表达式处理传感器数据流|文件IO保存机器人实验日志
开发语言·c++·ai·机器人
itzixiao44 分钟前
L1-067 洛希极限(10分)[java][python]
java·开发语言·算法