黑马程序员技术交流社区

标题: 父类和子类的方法名能重复吗? [打印本页]

作者: 殘遛の丶狳味    时间: 2013-8-7 21:37
标题: 父类和子类的方法名能重复吗?
public class Person
    {
        public void M()
        {

        }
    }

    public class Student : Person
    {
        public new void M()
        {

        }
    }

方法名能一样吗?


作者: xt654005440    时间: 2013-8-7 21:48
你所说依然是重载方法的范畴。
方法名字当然可以相同,而定义上又可以有不同以作区别。如果你执拗的弄得什么都一模一样那就没有意义了。

下面为定义重载方法Plus,并在Main中分别调用其各种重载形式对传入的参数进行计算:

namespace 重载方法
{

    class Program
    {
        public int Plus(int a,int b)        //声明Plus方法,其中有整型变量a和b
        {
            return a + b;

        }

        public double Plus(double a, int b)    //声明Plus方法,其中有double a和int b
        {
            return a + b;

        }

        public double Plus(double a, int b,int c)    //声明Plus方法,其中有double a,整型 b和c
        {
            return a + b+c;

        }
        static void Main(string[] args)
        {
            Program program = new Program();    //实例化对象
            int a = 2, b = 4, c = 9;
            double al = 3.3;
            //根据传入的参数不同,调用相对应的Plus重载函数
            Console.WriteLine(a + "+" + b + "=" + program.Plus(a, b));
            Console.WriteLine(al + "+" + b + "=" + program.Plus(al, b));
            Console.WriteLine(al + "+" + b + "+" + c + "=" + program.Plus(al, b,c));
            Console.ReadKey();
        }
    }
}

作者: lvjayj    时间: 2013-8-7 21:54
本帖最后由 lvjayj 于 2013-8-7 21:55 编辑

当然可以了,要不怎么有重写和隐藏父类这些方法呢。
如果重复可以用override关键字重写父类方法,或直接覆盖父类方法。
作者: 范国伟    时间: 2013-8-7 22:04
楼上说的是方法的重载,楼主问的是父类和子类的方法能不能重名
父类与子类方法重名有可能是方法的重写 也可能是楼主自己举的方法的隐藏
  1. public class Person
  2.     {
  3.         public void M()
  4.         {

  5.         }
  6.     }

  7.     public class Student : Person
  8.     {
  9.         public new void M() //这是隐藏父类的方法 现在定义的子类方法就与父类中的方法没有关系了完全是子类的方法
  10.         {

  11.         }
  12.     }
复制代码
还有一种就是方法的重写 父类中方法要用virtual 标记 子类用override重写
  1. public class Person
  2.     {
  3.         public virtual  void M()
  4.         {

  5.         }
  6.     }

  7.     public class Student : Person
  8.     {
  9.         public override void M() //这是方法的重写,实际上是重写了父类的方法 还是属于父类的
  10.         {
  11.            
  12.         }

  13.     }
复制代码
方法的重写和隐藏是不一样的
重写的方法在声明父类对象指向子类时 调用的是子类的方法 如:
  1.   Person p = new Student();
  2.           p.M();//这时是调用的子类的方法
复制代码
但是如果是隐藏父类的方法时候 同样的代码调用的是父类的方法 如
  1.   Person p = new Student();
  2.           p.M();//这时是调用的父类的方法
复制代码

作者: 追梦无悔    时间: 2013-8-8 06:32
能重复,不过重复之后就变成重载了

作者: brucel50    时间: 2013-8-8 08:06
回楼上说的 重复是重载……其实不是重载
父类用virtual修饰的方法。子类可以用override进行重写,当调用父类的那个方法时,会看有没有virtual进行修饰,如果有,就会看子类有无重写,有重写会调用子类的那个方法。
父类的方法没有virtual修饰,子类可以用new关键字修饰那个同名方法,编译器会提示这时会隐藏父类成员,会提示你要不要把父类中的同名方法加上virtual关键字。

总之:能重复。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2