在哪里放置超级有区别吗?

时间:2013-11-30 15:51:34

标签: java super

我想我在不同位置放置一个超级功能会对功能产生任何影响。

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

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

它完全一样吗?

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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

考虑一下:

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。

答案 2 :(得分:1)

不,不是。 test()方法中的代码是按顺序运行的。

因此,请致电

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

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