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