代码是我最大的快乐
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

关于overload,overwrite,override的使用区别

Posted on 2011-04-21 17:21  distance  阅读(1100)  评论(0编辑  收藏  举报
找工作很辛苦,转了一周了还没有头绪,想回学校散散心,于是回去了,回去我便被称为了高手,有人请教我"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++的解释方法更好理解,同是面向对象的编程,都是大同小异的吧!
小弟初来乍到,还算不上小菜,请高手批评指正!互相促进,互相学习!
现在可以给朋友扩谈一番了!
 
 
态度决定事情的结果,态度决定人生的方向,态度决定别人对你的看法,态度能改变自己,也可以主观地去改变态度,改变的出发点就是你自己。--By Distance