可以使用super来调用父方法来创建父对象

时间:2014-06-27 07:16:22

标签: java super

如果我们使用super关键字来调用子对象中父类的方法,是否会创建父对象?

结果显示Mybase和MySub具有相同的参考地址。不确定它是否是一个很好的演示。

类Mybase {

public void address() {
    System.out.println("super:" + this);
    System.out.println( this.getClass().getName());
}

}

类MySub扩展了Mybase {

public void address() {
    System.out.println("this:" + this);
    System.out.println( this.getClass().getName());
}

public void info() {
    System.out.println("this:" + this);
    super.address();
}

}

公共课SuperTest {

public static void main(String[] args) {
    new MySub().info();
}

}

1 个答案:

答案 0 :(得分:0)

好吧,让我们找出来吧!

您的测试不会完全回答您的问题。如果要查看是否创建了对象,为什么不在创建一个在调用时打印到控制台的构造函数?

public class Test {

    static class Parent {
        Parent() {
            System.out.println("Parent constructor called");
        }

        void method() {
            System.out.println("Parent method called");
        }
    }

    static class Child extends Parent {
        Child() {
            System.out.println("Child constructor called");
        }

        @Override
        void method() {
            System.out.println("Child method called");
            super.method();
        }
    }

    public static void main(final String[] args) {
        new Child().method();
    }
}

如果你运行它,你得到这个输出:

Parent constructor called
Child constructor called
Child method called
Parent method called

您可以看到,在调用method()时,使用Parent关键字时未创建super个对象。所以你的问题的答案是" no"。


原因是supersuper() 不同super(没有括号)用于访问父类的成员。 super()(带括号)是对父构造函数的调用,并且仅在构造函数中作为构造函数中的第一个调用有效。因此,使用super(没有括号)将创建一个新对象。

此外,super()实际上并未创建新的独立Parent对象。它只是在子构造函数继续之前对Parent字段进行初始化工作。