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

}

}

运行结果:

相关推荐
LawrenceLan9 小时前
Flutter 零基础入门(十一):空安全(Null Safety)基础
开发语言·flutter·dart
txinyu的博客9 小时前
解析业务层的key冲突问题
开发语言·c++·分布式
码不停蹄Zzz9 小时前
C语言第1章
c语言·开发语言
行者9610 小时前
Flutter跨平台开发在OpenHarmony上的评分组件实现与优化
开发语言·flutter·harmonyos·鸿蒙
阿蒙Amon10 小时前
C#每日面试题-Array和ArrayList的区别
java·开发语言·c#
SmartRadio10 小时前
ESP32添加修改蓝牙名称和获取蓝牙连接状态的AT命令-完整UART BLE服务功能后的完整`main.c`代码
c语言·开发语言·c++·esp32·ble
且去填词11 小时前
Go 语言的“反叛”——为什么少即是多?
开发语言·后端·面试·go
知乎的哥廷根数学学派11 小时前
基于生成对抗U-Net混合架构的隧道衬砌缺陷地质雷达数据智能反演与成像方法(以模拟信号为例,Pytorch)
开发语言·人工智能·pytorch·python·深度学习·机器学习
yeziyfx12 小时前
kotlin中 ?:的用法
android·开发语言·kotlin
charlie11451419112 小时前
嵌入式的现代C++教程——constexpr与设计技巧
开发语言·c++·笔记·单片机·学习·算法·嵌入式