为什么叫超()在构造函数?为什么叫超()在构造函数?(Why call super() in a c

2019-05-13 23:29发布

我负责的延伸类JFrame

这不是我的代码,它使一个呼叫super它开始修建GUI之前。 我不知道,因为我一直只是访问的父类的方法,而不必调用为什么这样做super();

Answer 1:

还有就是要隐式调用super()不带参数对于有父所有的类-这是Java中的每个用户定义的类-所以称它明确地通常不需要。 但是,您可以使用调用super()带参数,如果父类的构造采用参数,并希望指定他们。 此外,如果父类的构造需要的参数,它有没有默认参数的构造函数,你需要调用super()与参数(S)。

一个例子,要显式调用super()使您能够框架的标题一些额外的控制:

class MyFrame extends JFrame
{
    public MyFrame() {
        super("My Window Title");
        ...
    }
}


Answer 2:

你的父类的空构造函数的调用super()是自动完成的,当你不自己做。 这是你从来没有做到这一点在你的代码的原因。 它是为你做。

当你的超没有一个无参数的构造函数,编译器将需要向super适当的参数。 编译器将确保你正确实例化的类。 因此,这是不是你不用担心太多的东西。

无论您调用super()在构造函数或没有,它不会影响你打电话给你的父类的方法能力。

作为一个侧面说明,有人说,这是一般最好手动打这通电话为了清楚起见。



Answer 3:

我们可以通过使用超方法来访问超类元素

考虑到我们有两个类,父类和子类,与foo方法的不同实现。 现在,在子类中,如果我们要调用父类的foo方法,我们可以通过super.foo这样做(); 我们还可以访问由超()方法的父元素。

    class parent {
    String str="I am parent";
    //method of parent Class
    public void foo() {
        System.out.println("Hello World " + str);
    }
}

class child extends parent {
    String str="I am child";
    // different foo implementation in child Class
    public void foo() {
        System.out.println("Hello World "+str);
    }

    // calling the foo method of parent class
    public void parentClassFoo(){
        super.foo();
    }

    // changing the value of str in parent class and calling the foo method of parent class
    public void parentClassFooStr(){
        super.str="parent string changed";
        super.foo();
    }
}


public class Main{
        public static void main(String args[]) {
            child obj = new child();
            obj.foo();
            obj.parentClassFoo();
            obj.parentClassFooStr();
        }
    }


Answer 4:

它只是简单地调用父类的默认构造函数。



Answer 5:

我们可以访问使用超父类会员()

如果你的方法会覆盖其父类的方法之一,您可以通过使用关键字调用覆盖方法super 。 您还可以使用超级指一个隐藏字段(虽然隐藏字段灰心)。 考虑这个类,超类:

public class Superclass {

    public void printMethod() {
        System.out.println("Printed in Superclass.");
    }
}

//这是一个子类,称为子类,重写printMethod()

public class Subclass extends Superclass {

    // overrides printMethod in Superclass
    public void printMethod() {
        super.printMethod();
        System.out.println("Printed in Subclass");
    }
    public static void main(String[] args) {
        Subclass s = new Subclass();
        s.printMethod();    
    }
}

在子类中,简单名称printMethod()是指一个子类中声明,它覆盖了一个超类中。 因此,指printMethod()从超类继承,子类必须使用合格的名称,使用超级如图所示。 编译和执行子类打印以下内容:

Printed in Superclass.
Printed in Subclass


文章来源: Why call super() in a constructor?