找工作很辛苦,转了一周了还没有头绪,想回学校散散心,于是回去了,回去我便被称为了高手,有人请教我"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++的解释方法更好理解,同是面向对象的编程,都是大同小异的吧!
小弟初来乍到,还算不上小菜,请高手批评指正!互相促进,互相学习!
现在可以给朋友扩谈一番了!