这是重载,方法在不同的类和不同的签名中具有相同的名称吗?

Gen*_*oax 8 java oop overloading

如果我在Java中有以下代码:

class A {

    public int add(int a , int b) {
        return (a+b);
    }
}

class B extends A {
    public float add(float a , float b) {
        return (a+b);
}
Run Code Online (Sandbox Code Playgroud)

在这种特殊情况下,子类并不完全覆盖基类的add函数,因为它们具有不同的签名,并且仅当它们在相同的范围内时才发生重载的概念.那么,add(float , float)子类中的函数是否B被视为一个全新的函数,并且重载和重写的概念不适用于它?它是否使用"静态绑定"或"动态绑定"?

Bri*_*new 2

简而言之,是的。要重写,您需要复制完整的方法签名,其中包括方法名称、参数和返回类型。来自教程

子类中的实例方法与超类中的实例方法具有相同的签名(名称,加上其参数的数量和类型)和返回类型,该实例方法将覆盖超类的方法。

您可能需要考虑@Override 注释,如果您没有成功覆盖方法,它将触发编译器错误。

在这个特定的实例中,看起来您可能不需要覆盖太多包含泛型的解决方案。所以你可以实例化一个类a<Integer>和一个类似的类a<Float>