C# 中 重载,重写,隐藏的区别
2016-01-22 14:04
441 查看
重载: 就是写多个同名方法,参数个数不同或类型不同或返回值不同
重写:子类中实现的方法必须加override关键词 普通非抽象父类需要virtual 抽象类里面抽象方法abstract 接口的实现也是重写(更准确的应该说是实现,但是子类不需要override)
隐藏:等同于覆盖,A类(父类)可以普通实现,B类继承,new 一个和A中一样的方法。可以说算是重写方法的实现,但是不会修改到A中的方法。
具体区别如下:
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; }
相关文章推荐
- C# 常用小技巧
- C#操作符的重载
- c# - yield
- ①C#,利用数组求一个范围内的质数
- C# Best Practices - Specify Clear Method Parameters
- C#中的事件-订阅与发布
- Active MQ C#实现
- C# 五种加密方式
- C#操作服务
- C#基础知识学习
- C#邮件发送详解(适合初学者)
- C#如何获取设备名称?(笔记)
- C#中如何调用Webservice接口
- C#:如何去掉groupbox的边框线
- c# winform中treeview判断父节点与子节点的关系
- CLR VIA C# 泛型的协变和逆变
- C#获取DLL、程序路径,C#获取桌面、收藏夹等特殊系统路径
- 控制台编译C#
- C#进行Socket 连接发送和接收数据
- C#使用window API 控制打印纸张大小(转载)