C# 中 重载,重写,隐藏的区别

作者: howie 分类: C# 发布时间: 2017-09-18 09:57

重载: 就是写多个同名方法,参数个数不同或类型不同或返回值不同

重写:子类中实现的方法必须加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;
}