Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么超类';在调用任何子类方法';s代码?_Java_Inheritance - Fatal编程技术网

Java 为什么超类';在调用任何子类方法';s代码?

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.");

我这样问是出于好奇,而不是出于需要。我想答案大概是“因为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.");
}
为什么
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-好的,我已经在这里找到了同样的答案,所以我不会再写新的了。对于构造函数的情况,请检查此项-->