抽象类:
不能实例化。
可以在抽象类中定义抽象方法,以供派生类写具体方法。
派生类也可以保留抽象方法,但该类必须为抽象类。
也可以在抽象类中写非抽象方法。
例子:
抽象类
public abstract class AbstractClass
{
public abstract string GetName(string Name);
public string GetNameByID(string Name)
{
return Name;
}
}
派生类
public class UserClass:AbstractClass
{
public override string GetName(string Name)
{
return Name + "nihao.";
}
}
虚方法:
通过在基类中定义虚方法(virtual),在子类中,可以通过override进行派生重写。
例子
基类
public class VirtualClass
{
public virtual string GetName(string Name)
{
return Name;
}
}
子类
public class UserClass2:VirtualClass
{
public override string GetName(string Name)
{
//return base.GetName(Name);
return "Hello." + Name;
}
}
接口:
接口即契约。用于规定一种规则由大家遵守。允许多继承.而继承类只允许单继承.
定义接口
public interface UserInterface
{
void UserLogin(string UserName,string Password);
bool Login(out string exInfo);
}
使用接口
public class UserClass : UserInterface
{
#region UserInterface 成员
public void UserLogin(string UserName, string Password)
{
throw new Exception("The method or operation is not implemented.");
}
public bool Login(out string exInfo)
{
throw new Exception("The method or operation is not implemented.");
}
#endregion
}
说明:
多态是面向对象编程的三大特性之一。
接口和虚函数是多态的表现形式。
在需要多态的情境下:
如果类中方法可以确定下来,而以后可能改变方法的用途,使用虚函数较好。
如果类中方法不确定,用途也不确定。只能确定格式,那么使用接口,以方便需要的类进行继承。进行扩展。
抽象类不能多态。抽象类是用于在开发初期不清楚或者不确定后续方法细则的情况下使用。
虚函数是一个已经定义好的函数,可以直接使用。
接口只是定义契约,没有具体实现。必须继承后实现才能使用。
接口本质上仍然被标记为.class,同时提供abstract virtual 方法的Method,因此接口其实本质上可以看作是一个定义了抽象方法的类,该类仅提供了方法的定义,而没有方法的实现,其功能由接口的实现类来完成。
虚函数可以在抽象类和非抽象类中定义,而抽象方法必须在抽象类中定义。
抽象类中的非抽象方法,在派生的类中,不能重写。