【问题标题】:Is this method overloading, overriding or none? [duplicate]这个方法是重载、覆盖还是没有? [复制]
【发布时间】:2015-06-24 07:01:12
【问题描述】:

Difference between method overloading and overriding in java? 没有给出正确答案。下面是java代码。

父类

public class Parent {
    void display() {
        // some code
    }
}

儿童

public class child extends Parent
    void display(int a) {
        // some code
    }
}

问题:这个方法是重载、覆盖还是没有?

【问题讨论】:

  • 无,您可以通过将@Override 放在要覆盖的方法上来检查它,让编译器自己检查。
  • 我对覆盖和无感到困惑。
  • 无需混淆,您的示例既不会重载也不会覆盖。但是如果你想让编译器检查一个方法是否被覆盖,你可以放置@Override,编译器会告诉你。
  • @Smutje,对不起,我在重载和无之间感到困惑,但现在它清楚了。谢谢
  • @Smutje,请检查接受的答案。

标签: java polymorphism overloading overriding


【解决方案1】:

这是超载(在child),因为JLS 8.4.9

如果一个类的两个方法(是否都在同一个类中声明,或者 都由类继承或一个声明一个继承)具有 名称相同但签名不是覆盖等效的,则 方法名被称为重载。

【讨论】:

  • 谢谢,我只是为此感到困惑。干杯!!!
  • @T.J.Crowder,您能否更新被标记为该问题重复的问题的答案。
【解决方案2】:

这是重载

方法重载 - 同一类或不同类中的方法

方法覆盖 - 父子类中的方法

这里的方法在父类和子类中具有不同的签名

【讨论】:

  • 据我了解,如果您创建两个具有相同签名的冲突方法,那么编译器将抛出错误,除非您包含 @Override 符号。
  • @doveyg 是的,你是正确的。但不是在这种情况下
  • @doveyg:不,相反:如果你在一个实际上不是覆盖的方法中包含@Override,编译器会给你一个错误。如果您应该使用@Override,它不会给您一个错误(因为@Override是在最初指定语言后长时间添加的) .现在,在同一个类中,您不能有两个具有相同名称和签名的方法(无论您是否将@Override 放在其中一个上)。
  • 不,它正在超载(在child),请参阅JLS §8.4.9。重载不必在同一个类中,一个继承而另一个声明仍然重载。
  • @T.J.Crowder 更正,不知何故错过并完全搞砸了
猜你喜欢
  • 1970-01-01
  • 2021-09-30
  • 1970-01-01
  • 1970-01-01
  • 2019-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多