1.虚方法用到两个关键字
virtual 和 override
当子类继承与父类对象时,声明一个父类对象,通过在子类中重写父类对象的方法,可以直接调到子类的方法
public class Person
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
public Person(string name)
{
this.Name = name;
}
public virtual void SayHello()
{
Console.WriteLine("我是人类");
}
}
public class Chinese : Person
{
public Chinese(string name)
: base(name)
{
}
public override void SayHello()
{
Console.WriteLine("我是中国人,我叫{0}", this.Name);
}
}
2.抽象类,一般父类为抽象类,抽象成员必须在抽象类中,抽象类中也可以有非抽象成员(个人感觉抽象类是实现多态的一个介质)
1)抽象类的关键字为abstract,且不能被实例化
2)抽象类的方法必须为abstract修饰,且没有方法体。
3)子类继承父类对象方法也是用override进行重写
4)如果子类继承抽象类,则必须实现抽象类中的所有方法,且继承这个抽象父类的子类在重写父类方法时必须传入和父类抽象方法一样的参数,包括返回值也必须一样
-------------虚方法和抽象类
1)如果父类中的方法有默认的实现,并且父类需要被实例化,这时可以考虑将父类定义为一个普通类,用虚方法来实现
2)如果父类中的方法没有默认实现,父类不需要被实例化,则可以将该类定义为抽象类。
public abstract class Animal
{
public abstract void SayHello()
}
public class dog():Animal
{
public override void SayHello()
{
}
}