抽象类,虚方法,接口
这三样很多人容易混淆,在此总结一下
1. 虚方法 Virtual
基类中定义了虚方法,派生类中可以实现,也可以不实现,因为虚方法是有方法体的,如果要实现,派生类中用override重写该方法。
public class father
{
/// <summary>
/// 我是一个虚方法 可被我的儿子直接使用,也可被我的儿子通过override重写。
/// </summary>
/// <param name="A"></param>
/// <param name="B"></param>
/// <returns></returns>
public virtual string getstr(string A, string B)
{
return A + B;
}
public virtual string getstr(string A, string B, string C)
{
return A + B + C;
}
}
2.抽象方法 Abstract
抽象方法只能在抽象类中定义,并且只有定义没有实现,所以继承抽象类的派生类必须实现抽象方法,同样是用override关键字重写。
public abstract class AbstractFather
{
/// <summary>
/// 我是抽象方法,请务必把我放在抽象类中。如果我的儿子乐意使用,就必须使用override重写
/// </summary>
public abstract void str();
public abstract string getstr();
}
3.接口 Interface
没有具体实现,派生类必须实现全部的方法。
public interface InterfaceTest
{
/// <summary>
/// 我是接口,请务必把我全部实现
/// </summary>
void Istr();
string Igetstr();
}
需要注意的是,不管哪种方法,修饰符都不能是private,如果定义成私有的则无法被派生类实现,因为不可访问。