public abstract class People //abstract 说明类People是一个抽象类,不能被实例的
{
public People()
{
}
public void Work()
{
MessageBox.Show("开始工作!");
}
public virtual void GetOffWork() //虚函数,说明此方法可以被子类覆盖(override)
{
MessageBox.Show("下班啦!");
}
}
public class Manage:People //继承Popele类
{
public Manage()
{
}
new public void Work() //因为基类已经实现了Work方法,而在子类中又实现了Work方法,所以 //编译器会报警,在前面加上 new(隐藏基类方法),是将警报关闭。
{
base.Work(); //调节基类Popele的方法。显示“开始工作”
//MessageBox.Show("管理员开始工作罗!");
}
public override void GetOffWork() //覆盖基类的方法
{
MessageBox.Show("管理员下班啦");
}
}
public class Employee():People
{
public Employee()
{}
new public void GetOffWork() //virtual方法仍然可以 new
{
MessageBox.Show("职员下班啦!");
}
}
以上应该应该几点:
1、如果父类方法没有加virtual关键字,即不是一个虚方法,则在子类中只能隐藏基类方法,而不能覆盖。
2、如果父类方法加了virtual关键字,即它是一个虚方法,在子类中一样可以隐藏。
3、如果子类实现了父类相同的方法(相同的方法名称及签名),而没有new,在编译时会报警,但编译仍然能够通过!
3、调用父类方法:base.方法名()
4、abstract类是一个抽象类,不能被实例化
{
public People()
{
}
public void Work()
{
MessageBox.Show("开始工作!");
}
public virtual void GetOffWork() //虚函数,说明此方法可以被子类覆盖(override)
{
MessageBox.Show("下班啦!");
}
}
public class Manage:People //继承Popele类
{
public Manage()
{
}
new public void Work() //因为基类已经实现了Work方法,而在子类中又实现了Work方法,所以 //编译器会报警,在前面加上 new(隐藏基类方法),是将警报关闭。
{
base.Work(); //调节基类Popele的方法。显示“开始工作”
//MessageBox.Show("管理员开始工作罗!");
}
public override void GetOffWork() //覆盖基类的方法
{
MessageBox.Show("管理员下班啦");
}
}
public class Employee():People
{
public Employee()
{}
new public void GetOffWork() //virtual方法仍然可以 new
{
MessageBox.Show("职员下班啦!");
}
}
以上应该应该几点:
1、如果父类方法没有加virtual关键字,即不是一个虚方法,则在子类中只能隐藏基类方法,而不能覆盖。
2、如果父类方法加了virtual关键字,即它是一个虚方法,在子类中一样可以隐藏。
3、如果子类实现了父类相同的方法(相同的方法名称及签名),而没有new,在编译时会报警,但编译仍然能够通过!
3、调用父类方法:base.方法名()
4、abstract类是一个抽象类,不能被实例化