黑马程序员技术交流社区
标题:
子类对父类中虚方法重写(override)和覆盖(new)区别?
[打印本页]
作者:
不是炎亚纶
时间:
2013-11-10 21:27
标题:
子类对父类中虚方法重写(override)和覆盖(new)区别?
本帖最后由 不是炎亚纶 于 2013-11-11 13:08 编辑
RT {:soso_e178:}
作者:
凤凰涅槃
时间:
2013-11-11 09:05
主要区别就是重写可以实现多态,new隐藏不能实现多态。例如
class Person
{
public virtual void SayHi()
{
Console.WriteLine("人说Hello");
}
}
class Student : Person
{
public override void SayHi()
{
Console.WriteLine("学生说Hello");
}
}
class Teacher : Person
{
public new void SayHi()
{
Console.WriteLine("老师说Hello");
}
}
复制代码
//父类型的变量指向子类型的对象
Person person = new Student();
person.SayHi();
//运行结果:学生说Hello
//说明这里调用的是子类重写的方法,实现了多态
person = new Teacher();
person.SayHi();
//运行结果:人说Hello
//说明这里调用的是父类的方法,没有实现多态
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