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时,它使用该类的方法。