1.重写和覆盖:在c#中这两个是一个意思,重写就是覆盖,覆盖就是重写(在c++中是两个不同的概念)
2.隐藏:隐藏就是子类与父类的方法一样(子类函数名前加一个new),并且子类不是虚方法,那么子类就会隐藏父类方法
3.重载:方法名相同,参数列表不同
4.继承:c#中不允许多继承(接口可以)
下面看具体事例
1.重写(父类用virtual修饰(虚函数),子类用override修饰)
class Animal
{
public virtual void Voice()
{
Console.WriteLine ("Animal");
}
}
{
public virtual void Voice()
{
Console.WriteLine ("Animal");
}
}
class House:Animal
{
public override void Voice()
{
Console.WriteLine ("House");
}
}
{
public override void Voice()
{
Console.WriteLine ("House");
}
}
2.隐藏
子类可以隐藏父类的方法,不过在c#中会发出警告,添加一个new就ok了
使用new修饰,可以隐藏同名函数。
class ClassA//没有指定继承,则默认继承object
{
public void Method()
{
Console.WriteLine ("classA Method");
}
}
class ClassB:ClassA
{
public new void Method()
{
Console.WriteLine ("classB Method");
}
}
{
public void Method()
{
Console.WriteLine ("classA Method");
}
}
class ClassB:ClassA
{
public new void Method()
{
Console.WriteLine ("classB Method");
}
}
参数列表不同包括:
1.参数个数相同,参数类型不同
2.参数类型相同,参数个数不同
原函数: