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("
");

            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;
}