A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 不是炎亚纶 于 2013-11-11 13:08 编辑

RT {:soso_e178:}

评分

参与人数 1技术分 +1 收起 理由
追溯客 + 1

查看全部评分

3 个回复

倒序浏览
主要区别就是重写可以实现多态,new隐藏不能实现多态。例如
  1. class Person
  2.     {
  3.         public virtual void SayHi()
  4.         {
  5.             Console.WriteLine("人说Hello");
  6.         }
  7.     }
  8.     class Student : Person
  9.     {
  10.         public override void SayHi()
  11.         {
  12.             Console.WriteLine("学生说Hello");
  13.         }
  14.     }
  15.     class Teacher : Person
  16.     {
  17.         public new void SayHi()
  18.         {
  19.             Console.WriteLine("老师说Hello");
  20.         }
  21.     }
复制代码
  1. //父类型的变量指向子类型的对象
  2.             Person person = new Student();
  3.             person.SayHi();
  4.             //运行结果:学生说Hello
  5.             //说明这里调用的是子类重写的方法,实现了多态

  6.             person = new Teacher();
  7.             person.SayHi();
  8.             //运行结果:人说Hello
  9.             //说明这里调用的是父类的方法,没有实现多态
  10.             Console.ReadKey();
复制代码

评分

参与人数 1技术分 +2 收起 理由
追溯客 + 2

查看全部评分

回复 使用道具 举报
1.把一个基类函数声明为virtual就可以在任何派生类中重写改函数。
2.C#要求在派生类的函数重写另一个函数时,要使用override关键字显式声明。
3.如果签名相同的方法在基类和派生类中都进行了声明,但该方法没有分别声明为
virtual和override,派生类方法就会隐藏基类方法。
4.在大多数情况下要重写方法,而不是隐藏方法,
5.在C#中要隐藏一个犯法应使用new关键字声明。
回复 使用道具 举报
覆盖也是因为继承关系所以才能覆盖,重写了就是覆盖
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马