添加Lesson17
This commit is contained in:
@@ -0,0 +1,134 @@
|
||||
namespace Lesson17_多态_vob
|
||||
{
|
||||
#region 知识回顾
|
||||
|
||||
#region 封装——用程序语言来形容对象
|
||||
class 类名
|
||||
{
|
||||
#region 特征——成员变量
|
||||
#endregion
|
||||
|
||||
#region 行为——成员方法
|
||||
#endregion
|
||||
|
||||
#region 初始化调用——构造函数
|
||||
#endregion
|
||||
|
||||
#region 释放时调用——析构函数
|
||||
#endregion
|
||||
|
||||
#region 保护成员变量——成员属性
|
||||
#endregion
|
||||
|
||||
#region 像数组一样使用——索引器
|
||||
#endregion
|
||||
|
||||
#region 类名点出直接使用——静态成员
|
||||
#endregion
|
||||
|
||||
#region 自定义对象可计算——运算符重载
|
||||
#endregion
|
||||
}
|
||||
|
||||
#region 静态类和静态构造函数
|
||||
#endregion
|
||||
|
||||
#region 拓展方法
|
||||
#endregion
|
||||
|
||||
#endregion
|
||||
|
||||
#region 继承——复用封装对象的代码:儿子继承父亲,复用现成代码
|
||||
#endregion
|
||||
|
||||
#endregion
|
||||
|
||||
#region 知识点一 多态的概念
|
||||
// 多态按字面意思就是“多种状态”
|
||||
// 让继承同一父类的子类们 在执行相同方法时有不同的表现(状态)
|
||||
// 主要目的
|
||||
// 同一父类的对象 执行相同行为(方法)有不同的表现
|
||||
// 解决的问题
|
||||
// 让同一个对象有位移行为的特征
|
||||
#endregion
|
||||
|
||||
#region 知识点二 解决的问题
|
||||
class Father
|
||||
{
|
||||
public void Speak()
|
||||
{
|
||||
Console.WriteLine("Father Speak");
|
||||
}
|
||||
}
|
||||
class Son : Father
|
||||
{
|
||||
public void Speak()
|
||||
{
|
||||
Console.WriteLine("Son Speak");
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 知识点三 多态的实现
|
||||
//我们目前已经学过的多态
|
||||
//编译时多态——函数重载,开始就写好的
|
||||
|
||||
//我们将学习的:
|
||||
//运行时多态(vob、抽象函数、接口)
|
||||
//我们今天学习 vob
|
||||
//v: virtual(虚函数)
|
||||
//o: override(重写)
|
||||
//b: base(父类)
|
||||
|
||||
|
||||
|
||||
class GameObject
|
||||
{
|
||||
public string name;
|
||||
public GameObject(string name)
|
||||
{
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public virtual void Atk()//虚函数
|
||||
{
|
||||
Console.WriteLine("游戏对象攻击");
|
||||
}
|
||||
}
|
||||
class Player : GameObject
|
||||
{
|
||||
public Player(string name):base(name)
|
||||
{
|
||||
|
||||
}
|
||||
//代表着重写虚函数
|
||||
public override void Atk()
|
||||
{
|
||||
//base来保留父类的函数
|
||||
base.Atk();//执行父类(base)的Atk方法
|
||||
Console.WriteLine("玩家对象攻击");
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
internal class Program
|
||||
{
|
||||
static void Main(string[] args)
|
||||
{
|
||||
Console.WriteLine("Hello, World!");
|
||||
#region 解决的问题
|
||||
Father f = new Son();
|
||||
f.Speak();
|
||||
|
||||
(f as Son).Speak();
|
||||
#endregion
|
||||
|
||||
#region 多态的使用
|
||||
GameObject p = new Player("123");
|
||||
p.Atk();//虽然是父类对象装载的p,但是p是他的子类player类型的
|
||||
//如果不用override来重写,那么调用的atk将会是父类的atk
|
||||
//既然有了虚函数和重写那么调用的就是子类的atk
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user