Java 为什么超类';在调用任何子类方法';s代码?
我这样问是出于好奇,而不是出于需要。我想答案大概是“因为Java就是这样构建的”。我想知道为什么会选择这种方式 例如,如果我的超类有以下方法:Java 为什么超类';在调用任何子类方法';s代码?,java,inheritance,Java,Inheritance,我这样问是出于好奇,而不是出于需要。我想答案大概是“因为Java就是这样构建的”。我想知道为什么会选择这种方式 例如,如果我的超类有以下方法: public void foo() { System.out.println("We're in the superclass."); } 子类将覆盖该方法: @Override public void foo() { super.foo(); System.out.println("We're in the subclass.");
public void foo()
{
System.out.println("We're in the superclass.");
}
子类将覆盖该方法:
@Override
public void foo()
{
super.foo();
System.out.println("We're in the subclass.");
}
为什么super.foo()
必须位于子类方法的顶部(如果要使用它)?为什么我不能交换这两行使它看起来像这样:
@Override
public void foo()
{
System.out.println("We're in the subclass.");
super.foo();
}
没有。它适用于构造函数,但对于普通方法,您可以随时调用它。如果不想调用,甚至不必调用它,也可以调用不同的父类方法 从你的例子来看:
public static void main(String[] args) {
new B().foo();
}
static class A {
public void foo() {
System.out.println("In A");
}
}
static class B extends A {
public void foo() {
System.out.println("In B");
super.foo();
}
}
输出
In B
In A
答案(在构造函数的情况下)正是因为“Java语言这么说”:)它根本不是必需的。去吧,交换线路,它会工作的。仅针对施工人员,这是相当合理的。请注意,除了构造函数(语言强制调用
super()
)之外,还需要通过重写foo()
来调用super.foo()
,这是一种代码味道。您忘了提到的原因,为什么在构造函数中必须调用super())首先?
@shekharsuman没有必要“因为”,因为问题的假设是错误的:)。@shekharsuman构造函数不是问题的一部分,但如果你想,写一个答案,每一点信息都有帮助。@biziclop-好的,我已经在这里找到了同样的答案,所以我不会再写新的了。对于构造函数的情况,请检查此项-->