子类是否可以覆盖方法并具有不同的参数?

时间:2015-03-05 21:16:02

标签: java c# oop

我希望在多个子类中有一个方法,它基本上可以完成某些事情(比如获取用户信息),但是在主类中声明(并且具有不同的参数和定义)。这可能吗?

我知道这不是真的重写,但可以这样做,还是不适合构建方法?

3 个答案:

答案 0 :(得分:4)

您要做的是称为重载方法。它是可行的并经常发生。 Play with the fiddle here. Java类似。

public class Parent
{        
    public virtual string HelloWorld()
    {
        return "Hello world";
    }

    public string GoodbyeWorld()
    {
        return "Goodbye world";
    }
}

public class Child : Parent
{
     // override: exact same signature, parent method must be virtual
    public override string HelloWorld()
    {
        return "Hello World from Child";
    }

     // overload: same name, different order of parameter types
    public string GoodbyeWorld(string name)
    {
        return GoodbyeWorld() + " from " + name;
    }
}

public class Program
{
    public static void Main()
    {
        var parent = new Parent();
        var child = new Child();
        Console.WriteLine(parent.HelloWorld());
        Console.WriteLine(child.HelloWorld());
        Console.WriteLine(child.GoodbyeWorld());
        Console.WriteLine(child.GoodbyeWorld("Shaun"));
    }
}

答案 1 :(得分:0)

您可以拥有同名方法的多个版本,这些方法具有不同数量的参数。您可以在main / parent类中包含所有这些,也可以仅在子类中添加较新的版本。这样做没有限制。

答案 2 :(得分:0)

如评论和其他答案中所述,您可以在子类中定义一个方法,该方法与其超类中的方法同名,但您无法完全覆盖它。这两种方法仍然存在,因此它被称为重载。在JavaC Sharp中,它的工作原理基本相同;您只需使用不同的参数定义一个新方法。但是不能只更改返回类型。方法的参数必须不同才能使方法过载。 Here是一篇关于Java中的重载与覆盖的文章。