C# 中 重载,重写,隐藏的区别
重载: 就是写多个同名方法,参数个数不同或类型不同或返回值不同
重写:子类中实现的方法必须加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; }
一个苦逼程序员