学习C#的第八天
-
类的多态
- 虚方法 virtual - 将父类的方法标记为虚方法 - 方法可以在子类中重写 override
namespace test
{
class Program
{
static void Main(string[] args)
{
Clerk mC = new Clerk();
Manger mM = new Manger();
//Manger 是 Clerk的子类, 所以可以创建一个数组输出Clerk 和 Manger
Clerk[] clerk = { mC, mM };
foreach(Clerk c in clerk)
{
c.WorkPlan();
}
Console.ReadKey();
}
}
//不加 virtual 和 override 不会输出Manger里的 WorkPlan
class Clerk
{
public virtual void WorkPlan()
{
Console.WriteLine("我是职员,我有工作计划");
}
}
class Manger : Clerk
{
public override void WorkPlan()
{
Console.WriteLine("我是项目经理,我也有工作计划");
}
}
}
- 抽象类 与 抽象方法
- 抽象类不允许创建实例
namespace test
{
class Program
{
static void Main(string[] args)
{
Drinks milk = new Milk();
Drinks tea = new Tea();
Drinks[] drinks = { milk, tea };
foreach (Drinks outdrink in drinks)
outdrink.drink();
Console.ReadKey();
}
}
//基类不能实例化
abstract class Drinks
{
public abstract void drink();
}
class Milk : Drinks
{
public override void drink()
{
Console.WriteLine("牛奶,解渴");
}
}
class Tea : Drinks
{
public override void drink()
{
Console.WriteLine("茶,解渴");
}
}
}
- 接口实现
-
接口
- 定义: 描述任何类或结构的一组相关功能 - 组成: 由属性,方法,事件,索引器任意组合构成 - 修饰符 interface 接口名称{ - 成员; - } - 接口默认声明为public 类默认声明private
namespace winApp
{
interface IEatable
{
//属性 由于接口不能有字段,属性经常被写成自动属性
string Name
{
get;
set;
}
//方法 不能包含方法体
void Write();
string Read();
}
}