当调用继承的方法(Java)时,子类会使用超类方法还是子类方法
如果我在一个超类中有两个方法,分别称为a()和b(),b()调用a(),我有一个子类重写a(),那么,如果我在子类的实例上调用b(),它会在超类中使用a()的变体还是在子类中使用a()的变体当调用继承的方法(Java)时,子类会使用超类方法还是子类方法,java,inheritance,Java,Inheritance,如果我在一个超类中有两个方法,分别称为a()和b(),b()调用a(),我有一个子类重写a(),那么,如果我在子类的实例上调用b(),它会在超类中使用a()的变体还是在子类中使用a()的变体 提前感谢您的回答:我在搜索中没有找到任何东西,因为这个问题很难用搜索词来表达。它将调用子类中的问题。你可以设计一个实验来测试自己: class Super { void a() { System.out.println("super implementation"); } void b()
提前感谢您的回答:我在搜索中没有找到任何东西,因为这个问题很难用搜索词来表达。它将调用子类中的问题。你可以设计一个实验来测试自己:
class Super {
void a() { System.out.println("super implementation"); }
void b() { System.out.println("calling a()..."); a(); }
}
class Sub extends Super {
void a() { System.out.println("sub implementation"); }
}
public class Main {
public static void main(String[] args) {
Sub x = new Sub();
x.b();
// Prints:
// calling a()...
// sub implementation
}
}
它将调用子类中的一个。你可以设计一个实验来测试自己:
class Super {
void a() { System.out.println("super implementation"); }
void b() { System.out.println("calling a()..."); a(); }
}
class Sub extends Super {
void a() { System.out.println("sub implementation"); }
}
public class Main {
public static void main(String[] args) {
Sub x = new Sub();
x.b();
// Prints:
// calling a()...
// sub implementation
}
}
值得一提的是:这是由于
a()
隐式地成为this.a()
,而this
始终是调用对象。调用对象是类<代码>子< /C>,因此它总是会开始寻找方法调用。额外的困惑的边注释:在C++(不是java!)中,省略<代码>虚拟< /Cord>关键字意味着超类仍然会调用它自己的代码>())/Cux>方法。在C++构造函数中,所有的方法都被视为非虚拟的,不像java。值得注意的是:这是由于<代码>())/>代码隐式地变成了<代码>。调用对象是类<代码>子< /C>,因此它总是会开始寻找方法调用。额外的困惑的边注释:在C++(不是java!)中,省略<代码>虚拟< /Cord>关键字意味着超类仍然会调用它自己的代码>())/Cux>方法。在C++构造函数中,所有方法都被视为非虚拟的,不像java。