参数列表必须不相同
返回类型可以不相同
覆写:(3相同) 方法名必须相同
参数列表必须相同
返回类型必须相同
若要在派生类中使用基类的方法:则使用base关键字,例:base.方法名()
virtual virtual
override(覆写) new(不覆写)
abstract抽象方法:1、必须是被派生类覆写的方法
2、可以看成是没有实现体的方法
3、若类中包含抽象方法,则类必须定义为抽象类,不论是否还包含其他方法
例:
class classA
{
public virtual void Func()
{
Console.WriteLine("FuncA()");
}
}
class classB : classA
{
public new void Func() //new表示不覆写,调用类A中的方法
{
Console.WriteLine("FuncB()");
}
//public override void Func() //override表示覆写,调用类B中的方法
//{
// Console.WriteLine("FuncB()");
//}
}
static void Main()
{
classA aa = new classA();
aa.Func();//FuncA()
classB bb = new classB();
bb.Func();//FuncB()
classA cc = new classB();
cc.Func();//FuncA();
}
{
public virtual void Func()
{
Console.WriteLine("FuncA()");
}
}
class classB : classA
{
public new void Func() //new表示不覆写,调用类A中的方法
{
Console.WriteLine("FuncB()");
}
//public override void Func() //override表示覆写,调用类B中的方法
//{
// Console.WriteLine("FuncB()");
//}
}
static void Main()
{
classA aa = new classA();
aa.Func();//FuncA()
classB bb = new classB();
bb.Func();//FuncB()
classA cc = new classB();
cc.Func();//FuncA();
}
class classA
{
public virtual void Func()
{
Console.WriteLine("FuncA()");
}
}
class classB : classA
{
//public new void Func() //new表示不覆写,调用类A中的方法
//{
// Console.WriteLine("FuncB()");
//}
public override void Func() //override表示覆写,调用类B中的方法
{
Console.WriteLine("FuncB()");
}
}
static void Main()
{
classA aa = new classA();
aa.Func();//FuncA()
classB bb = new classB();
bb.Func();//FuncB()
classA cc = new classB();
cc.Func();//FuncB();
}
{
public virtual void Func()
{
Console.WriteLine("FuncA()");
}
}
class classB : classA
{
//public new void Func() //new表示不覆写,调用类A中的方法
//{
// Console.WriteLine("FuncB()");
//}
public override void Func() //override表示覆写,调用类B中的方法
{
Console.WriteLine("FuncB()");
}
}
static void Main()
{
classA aa = new classA();
aa.Func();//FuncA()
classB bb = new classB();
bb.Func();//FuncB()
classA cc = new classB();
cc.Func();//FuncB();
}