【问题标题】:Method overloading vs overriding in javaJava中的方法重载与重写
【发布时间】:2023-02-05 23:16:46
【问题描述】:

下面的代码是方法重载或覆盖的示例吗?

我从超类继承了一个方法到具有 main 方法的子类,但是很少有网站显示重载方法应该只在父类中重新定义,但我没有那样做。

class overload
{
    public static void sum(int a, int b, int c)
    {
        System.out.println("sum="+(a + b + c));
    }
}

class Main extends overload
{
    static void sum(int a, int b)
    {
       System.out.println("sum="+(a+b));
    }
    
    public static void main (String s [])
    {
       sum(1,2);
       sum(1,2,3);
    }
}

【问题讨论】:

标签: java


【解决方案1】:

是的,这是重载:它提供了两个具有相同名称但不同签名的方法。

覆盖仅在具有相同签名的情况下出现,其中子类提供了不同的执行无需更改公开的 API。 跨类层次结构重载而不是在同一类中声明所有方法在这里增加了额外的复杂性,但这并没有改变从根本上说这是重载的事实。

(请注意,此处是否存在 main 方法是无关紧要的。如果没有它,您的代码仍然是重载的示例。)

为了增加一点复杂性,重写不能使用静态方法进行。子类可以声明一个与超类中的签名具有相同签名的静态方法,而无需覆盖任何东西——因为当调用静态方法时,没有对象可用于选择要调用的实现。那不会是重写的情况或者超载。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-01
    相关资源
    最近更新 更多