找工作很辛苦,转了一周了还没有头绪,想回学校散散心,于是回去了,回去我便被称为了高手,有人请教我"new"是调用的什么方法
我仔细一看上边有一个基类,下边有三个继承类,我一看明白了,就知道是和override有关系, 但是这个new关键字的我还是第一次看到呢,当时我也很无语,正所谓知耻后勇嘛,回来查了一翻,暂时有了点头绪了
切入正题:
using System; using System.Collections.Generic; using System.Text; namespace Override_Overload_Overwrite { //基类 public class Parent { public void F() { Console.WriteLine("Parent.F()"); } public virtual void G() { Console.WriteLine("Parent.G()"); } public int Add(int x, int y) { return x + y; } //重载(overload)Add函数 public float Add(float x, float y) { return x + y; } } //派生类1
class ChildOne:Parent { //重写(overwrite)父类函数 new public void F() { Console.WriteLine("ChildOne.F()"); } //覆写(override)父类虚函数,主要实现多态 public override void G() { Console.WriteLine("ChildOne.G()"); } } //派生类2
class ChildTwo:Parent { new public void F() { Console.WriteLine("ChildTwo.F()"); } public override void G() { Console.WriteLine("ChildTwo.G()"); } } class Program { static void Main(string[] args) { Parent childOne = new ChildOne(); Parent childTwo = new ChildTwo(); //调用Parent.F() childOne.F(); childTwo.F(); //实现多态 childOne.G(); childTwo.G(); Parent load = new Parent(); //重载(overload) Console.WriteLine(load.Add(1, 2)); Console.WriteLine(load.Add(3.4f, 4.5f)); Console.Read(); } } }
1. 对于 overload 我听过的最多的看法就是派生类中的方法和基类中的方法名相同,只是参数类型不同,其实更确切的说应该是返回类型的不同---它并没有关键字;
2. 对于 overwrite 也就是我朋友问我的这个问题, overwrite 就是将方法名和方法参数都重写一遍,就仿佛基类中根本不存在这样一个方法似的,自然它的关键字就是 new 了;
3. 对于 override 是我们最常听说的了---覆写(也有人叫做重写),这一方法是继承来自基类的方法,但是方法名要重写---关键字为override ;
在这里要感谢 iTech's Blog 的博客,个人认为在这篇博客中C++的解释方法更好理解,同是面向对象的编程,都是大同小异的吧!
小弟初来乍到,还算不上小菜,请高手批评指正!互相促进,互相学习!
现在可以给朋友扩谈一番了!