黑马程序员技术交流社区

标题: 子类对父类中虚方法重写(override)和覆盖(new)区别? [打印本页]

作者: 不是炎亚纶    时间: 2013-11-10 21:27
标题: 子类对父类中虚方法重写(override)和覆盖(new)区别?
本帖最后由 不是炎亚纶 于 2013-11-11 13:08 编辑

RT {:soso_e178:}
作者: 凤凰涅槃    时间: 2013-11-11 09:05
主要区别就是重写可以实现多态,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();
复制代码

作者: y494890511    时间: 2013-11-11 22:54
1.把一个基类函数声明为virtual就可以在任何派生类中重写改函数。
2.C#要求在派生类的函数重写另一个函数时,要使用override关键字显式声明。
3.如果签名相同的方法在基类和派生类中都进行了声明,但该方法没有分别声明为
virtual和override,派生类方法就会隐藏基类方法。
4.在大多数情况下要重写方法,而不是隐藏方法,
5.在C#中要隐藏一个犯法应使用new关键字声明。
作者: 南桥听雨    时间: 2015-3-12 15:10
覆盖也是因为继承关系所以才能覆盖,重写了就是覆盖




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2