Java 在哪里放置super有区别吗?

Java 在哪里放置super有区别吗?,java,super,Java,Super,我不知道我在不同的位置安置一个超级玩家会对功能产生什么影响 public void test(){ super.test() // my code } 及 是否完全相同?如果在代码之前调用超级类方法test(),则超级类方法将在名为my code的子类方法代码执行之前被调用。执行顺序将根据您在方法中的顺序而变化。不,它不一样。在第一个示例中,超级类的方法首先执行,而在第二个示例中,它在最后执行。这个小例子将说明这一点: 考虑这一点: class Main { public static

我不知道我在不同的位置安置一个超级玩家会对功能产生什么影响

public void test(){
super.test()
// my code
}


是否完全相同?

如果在代码之前调用超级类方法
test()
,则超级类方法将在名为
my code
的子类方法代码执行之前被调用。执行顺序将根据您在方法中的顺序而变化。

不,它不一样。在第一个示例中,超级类的方法首先执行,而在第二个示例中,它在最后执行。这个小例子将说明这一点:

考虑这一点:

class Main
{
    public static void main (String[] args) throws java.lang.Exception
    {
        new Child().test(5);
    }
}
class Parent {
    public void test(int a){
        System.out.println(a);
    }
}

class Child extends Parent{
    @Override
    public void test(int a){
        super.test(a);
        a++;
    }
}
它将打印5

但是,如果我将超级调用放在覆盖的测试方法的末尾

class Child extends Parent{
    @Override
    public void test(int a){
        a++;
        super.test(a);
    }
}

它将打印6。不,它不是。test()方法中的代码是按顺序运行的

因此,呼吁

new B().test();
new C().test();

将导致输出:

BA
AC

这有点取决于
//mycode
的作用,如果父类知道它有任何影响,那么交换语句会改变它们的执行顺序。
class A {
  public void test() {
     System.out.print("A");
  }
}

class B extends A {
  public void test() {
     System.out.println("B");
     super.test();
  }
}

class C extends A {
  public void test() {
     super.test();
     System.out.println("C");
  }
}
BA
AC