Java 如何在仍然调用超类方法的情况下向重写子类方法添加其他实现

Java 如何在仍然调用超类方法的情况下向重写子类方法添加其他实现,java,inheritance,overriding,Java,Inheritance,Overriding,我想在不完全重写超类方法的情况下,为重写子类方法添加额外的实现。到目前为止,我已经做到了这一点,但它似乎不起作用。我希望输出是“超类返回”,然后是“子类返回”。代码如下: public class A { public String send() { return "superclass return"; } } public class B extends A{ public String send() { super.send(); return "su

我想在不完全重写超类方法的情况下,为重写子类方法添加额外的实现。到目前为止,我已经做到了这一点,但它似乎不起作用。我希望输出是“超类返回”,然后是“子类返回”。代码如下:

public class A {
  public String send() {
    return "superclass return";
  }
}

public class B extends A{
  public String send() {
    super.send();
    return "subclass return";
  }
}

public class Driver {
  public static void main(String[] args) {
    B b = new B();
    System.out.println(b.send());
  }
}

输出:
子类返回

我是否使用了错误的语法
super.send()
?预期输出应为:

superclass return
subclass return

您丢失了super
send()
方法的返回值,因此无法在输出中看到它。为了能够同时看到这两种情况,您需要将子实现修改为如下内容:

public String send() {
   String value = super.send();
   return value + "subclass return";
}

您没有对超类的返回值进行任何操作。试试这个:

public class A {
  public String send() {
    return "superclass return";
  }
}

public class B extends A{
  public String send() {
    return super.send() + "subclass return";
  }
}

public class Driver {
  public static void main(String[] args) {
    B b = new B();
    System.out.println(b.send());
  }
}
或者,如果要换行,请执行以下操作:

return super.send() + "\nsubclass return";

超类方法返回一个字符串值,但您不使用它。正确。但是为什么要使用额外的
变量呢?请将
super.send()
想象成与任何其他方法调用一样。它有一个返回值,我们需要将它保存在一个变量中,以便在子实现中使用它。这与在对象构造函数中调用
super()
时不同。我知道这一点。但是为什么不改为
super.send()+“subclass return”
?当然,可以修改子方法的最后一行:
return super.send()+“subclass return”
。最后,您只使用了返回值,而没有将其保存在变量中。