重载: 就是写多个同名方法,参数个数不同或类型不同或返回值不同
重写:子类中实现的方法必须加override关键词 普通非抽象父类需要virtual 抽象类里面抽象方法abstract 接口的实现也是重写(更准确的应该说是实现,但是子类不需要override)
隐藏:等同于覆盖,A类(父类)可以普通实现,B类继承,new 一个和A中一样的方法。可以说算是重写方法的实现,但是不会修改到A中的方法。
具体区别如下:
static void Main(string[] args)
{
B b = new B();
b.ClassA();
A a = b;
a.ClassA();
Console.WriteLine("\n");
B2 b2 = new B2();
b2.ClassA2();
A2 a2 = b2;
a2.ClassA2();
Console.ReadKey();
}
}
//
class A
{
public void ClassA()
{
Console.WriteLine("A.ClassA()");
}
}
class B : A
{
new public void ClassA()
{
Console.WriteLine("B.ClassA()");
}
}
//
class A2
{
public virtual void ClassA2()
{
Console.WriteLine("A2.ClassA2()");
}
}
class B2 : A2
{
public override void ClassA2()
{
Console.WriteLine("B2.ClassA2()");
}
}
}
C++也是类似
class A
{
public:
virtual void print()
{
printf("AAAAAA");
}
};
class B :public A
{
public:
void print()
{
printf("BBBBB");
}
};
int main()
{
B *b = new B();
b->print();
A *a = b;
a->print();
return 0;
}