Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java方法重写-使用参数时调用父方法_Java_Polymorphism_Overriding - Fatal编程技术网

Java方法重写-使用参数时调用父方法

Java方法重写-使用参数时调用父方法,java,polymorphism,overriding,Java,Polymorphism,Overriding,以下是我编写的代码: 最相关的部分: A a = new A(); B b = new B(); System.out.println(((A) b).a()); System.out.println(((A) b).b(3)); static class A { Object a() { System.out.println("A.a()"); } Object b(Number x) {

以下是我编写的代码:

最相关的部分:

    A a = new A();
    B b = new B();    

    System.out.println(((A) b).a());    
    System.out.println(((A) b).b(3));    


  static class A {
    Object a() {
      System.out.println("A.a()");
    }

    Object b(Number x) {
      System.out.println("A.b()");    
    }
  }


  static class B extends A {
    String a() {
      System.out.println("B.a()");
      return "hello";
    }

    String b(Integer x) {
      System.out.println("B.b()");
      return "hola" + x;
    }
  }
运行此操作时,将显示第一次打印

B.a()
hello
这就是我所期望的,因为即使我们强制转换为A,调用也会传递到对象的实际类型,即B

但是第二个打印,((A)b).b(3)调用,打印

A.b()
3

(即,它调用A中的方法)。强制将3转换为整数也没有任何作用。有人能给我解释一下这种行为吗?我不明白原因是什么。我希望((A)b).b(3)打印
b.()\n hola3
而不是使用父类方法。

在Java中,一个方法重写父类中的另一个方法的原因是它具有相同的名称,但数量和/或参数类型不同

在您的例子中,类
A
有一个方法
b(数字x)
,而扩展
A
的类
b
有一个方法
b(整数x)
=>
b.b()
在执行
((A)b)时不会覆盖
A.b()
。b(b)
,执行
A.b(3)

相反,
B.a()
在执行
((a)B.)时会覆盖
==>执行
B.a()


方法的返回值在重写时并不重要,只需名称和参数。

要打印所需内容,需要使用b.b(3),因为在强制转换((A)b.b(3)类A时,它使用该类的方法。