gpt4 book ai didi

java - Java中覆盖方法的更广泛的参数类型

转载 作者:行者123 更新时间:2023-12-01 14:08:46 25 4
gpt4 key购买 nike

下面的代码破坏了什么OO原则?不是 Java OO 原则,而是一般 OO 原则。

class GeneralArg{}
class Arg extends GeneralArg{}

class A{
public void test(Arg a){}
}

class B extends A{
@Override
public void test(GeneralArg a){}
}

我认为这应该可行!

但是有一个编译错误说 B.test() 没有覆盖 A.test()

最佳答案

您正在做的不是覆盖而是重载。

当你改变参数列表时你重载了一个方法。当你改变它的实现时,你会覆盖一个方法。

    public class Foo {

public void method1() {
}

public void method1(String str) {
//We overload method1
}

}

public class Bar extends Foo {

public void method1(String str) {
// We override method1 here
}

public void method1(Number num) {
// We overload method1 here
}
}

请注意,注释不是强制性的,它只会通知编译器您已覆盖某些方法以防止潜在的错误。

当您在子类中声明具有相同 [签名] 的方法时,您会结束它,当您添加/删除开关参数顺序时,您会重载。该规则遵循 Java 世界,因为每个非 final方法都是虚拟的,并且可以被覆盖。

关于java - Java中覆盖方法的更广泛的参数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18337056/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com