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

标签 java oop overriding

下面的代码破坏了什么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/

相关文章:

oop - 实体集和实体有什么区别?这是定义标准吗?

python - 覆盖第三方模块的方法有多糟糕?

Android 自定义 EditText 和后退按钮覆盖

Java测试驱动开发

java - 在 MBA m1 Activity 监视器中,处理器名称 "java"显示 "kind" "intel"

java - 为什么我不能在main方法中创建方法

oop - 如何获取从 django 中的同一父类继承的所有实例

java - Android OnNavigationListener 覆盖?

java - 获取每个月的计数

java - 调试器只在断点处停止,不会在 "step over"