文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>override和new在派生类中的区别

override和new在派生类中的区别

时间:2011-05-25  来源:scorpioying

我在读《把new说透》这一章时,对于new作为修饰符的作用这一部分算是一带而过,没考虑过其具体的作用,也没想过和override的区别究竟在哪,刚才我仔细思考了一下这个问题,又写了代码测试了一下,下面对两者的区别说明一下,主要是理解一下new作为修饰符的作用。

先看一下override的作用吧,众所周知,override用于在派生类中重写基类的虚方法,这种方法的调用发生在运行期,也就是动态的多态性

View Code
public class MyFunc
{
public virtual void method(string str)
{
Console.WriteLine(
"虚方法中的str {0}", str);
}
}

public class firstFunc : MyFunc
{
public override void method(string str)
{
Console.WriteLine(
"复写方法中的str {0}", str);
}
}

public class secondFunc : MyFunc
{
public override void method(string str)
{
base.method(str); //base用于同基类通信
}
}
class Program
{
static void Main(string[] args)
{
MyFunc B
= new MyFunc();
B.method(
"first"); //调用基类中的方法method

firstFunc A
= new firstFunc();
B
= A; //调用复写方法中的method
B.method("second");

secondFunc C
= new secondFunc();
B
= C;
B.method(
"third");
}
}

输出结果:


实例A复写了基类中的虚方法,实现的是他自己的版本。

再来看看new

View Code
public class MyFunc
{
public virtual void method(string str)
{
Console.WriteLine(
"虚方法中的str {0}", str);
}
}

public class firstFunc : MyFunc
{
public new void method(string str)
{
Console.WriteLine(
"复写方法中的str {0}", str);
}
}

public class secondFunc : MyFunc
{
public override void method(string str)
{
base.method(str); //base用于同基类通信
}
}
class Program
{
static void Main(string[] args)
{
MyFunc B
= new MyFunc();
B.method(
"first"); //调用基类中的方法method

firstFunc A
= new firstFunc();
B
= A; //调用复写方法中的method
B.method("second");

secondFunc C
= new secondFunc();
B
= C;
B.method(
"third");
}
}

输出结果:

可以看到,在子类firstFunc中使用new代替了override后,输出结果变成了父类中的方法,也就是new作为修饰符的作用:用于向基类成员隐藏继承的成员,也就是隐藏派生类的方法,该派生类的方法是独立于其父类的方法的,两者同时存在。

以前我从不会对这些基础的东西深究,问了一些隔壁教研室的同学,他们也对这些概念很模糊,有些甚至从来没听说过new作为修饰符与override的区别,老师分配了任务,完成了就觉得什么都OK了,想起前几天在博客园中看的一篇文章,你在学校里做过的那些项目对于公司来说都是小case,公司招人做项目也并不是看谁做过类似的项目才会招这个人,其实把知识学好了,coding能力提高了,什么项目做不出来呢~~看了博客园里的一些前辈说现在的年轻人太浮躁,不肯静下心来踏踏实实学一些基础知识,以为自己跟着导师做过多少项目就觉得自己已经是个牛人了,这样的心态以后踏上社会是很容易吃亏的。

还记得上学期有一门课,我们私下里都对老师有一些意见,对于老师念叨的那些基础概念厌恶至极,老师后来让我们给她发Email提一下自己对这堂课的看法,我记得我当时提到了一个问题,就是希望老师讲讲实际的东西,这个问题再后来上课时老师给解答了,她说她理解的实际的东西和我们理解的是不一样的,读研期间是要通过查阅大量的文献,培养自己的学习能力,而不在于你写了多少行代码,当然,还有一项重要的,就是你的文笔。我至今对那位老师说的话印象很深,其实很多同学都是这样,一上来就想参与什么什么项目,而丢弃了自己最该学习的东西,基本功不扎实,这是很多人的通病吧,包括我在内。

我现在每天除了认真学习那些基础的东西外,也会写大量的代码,培养自己的手感,这样的生活,让我觉得很踏实。。。

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载