在Java中使用子类对象调用父方法
是否有方法调用父类方法,这些方法由使用子类对象的子类重写? 我知道可以在重写的方法中使用super.foo()将调用重定向到父类方法,但是有没有一种方法不需要在调用父类方法之前先进入子类方法?否 如果类在Java中使用子类对象调用父方法,java,inheritance,Java,Inheritance,是否有方法调用父类方法,这些方法由使用子类对象的子类重写? 我知道可以在重写的方法中使用super.foo()将调用重定向到父类方法,但是有没有一种方法不需要在调用父类方法之前先进入子类方法?否 如果类Child的对象被调用来执行x(),那么在Java中,它的类(Child)负责提供正确的实现。因此,Child类始终负责,在为x()调用提供服务的过程中,是否调用其父类方法是Child类的唯一决定 如果您发现子类实现不适合为x()调用提供服务,那么这就是child.x()方法实现的一个bug,您必
Child
的对象被调用来执行x()
,那么在Java中,它的类(Child
)负责提供正确的实现。因此,Child
类始终负责,在为x()
调用提供服务的过程中,是否调用其父类方法是Child
类的唯一决定
如果您发现子类实现不适合为x()
调用提供服务,那么这就是child.x()
方法实现的一个bug,您必须修复该实现才能正确地为调用提供服务
如果对于某些给定的调用参数,子类无法判断如何正确地为调用提供服务,那么该方法的设计(作为调用方和被调用方之间的契约)是有缺陷的,您应该对此进行清理,例如,从
x()
生成两个不同的方法,您不必调用super.foo()来自foo()的子类实现
如果这是你需要面对的情况,那么程序的设计就很差,你必须考虑重新设计。您越多地应用补丁来打破OOPS原则,代码就会变得越脏,越不可管理。
public class Main {
static class A {
void foo() {
System.out.println("A.foo()");
}
}
static class B extends A {
void foo() {
System.out.println("B.foo()");
}
void bar() {
super.foo();
}
}
public static void main(String[] args) {
B b = new B();
b.bar();
}
}