Java继承:我可以使用超类中的参数访问构造函数吗?

时间:2014-08-25 23:58:54

标签: java

假设我有一个班级:

package inheritanceexample;

public class SuperClass {

    public SuperClass() {
        System.out.println("super class constructor 1");
    }

    public SuperClass(int a) {
        System.out.println("super class constructor 2");
    }

    public SuperClass(int a, int b) {
        System.out.println("super class constructor 3");
    }
}

public class SubClass extends SuperClass {

    public SubClass() {
        System.out.println("sub class constructor 1");
    }

    public SubClass(int a) {
        System.out.println("sub class constructor 2");
    }

    public SubClass(int a, int b) {
        System.out.println("sub class constructor 3");
    }
}

public class SubClass1 extends SubClass {

    public SubClass1(int a) {
        super(a);
        System.out.println("sub class 1 constructor 1");
    }
}

如何使用参数访问超类中的构造函数,让我们说构造函数SuperClass(int a),如果我要在SubClass1 extends SubClass中访问它,那么当我将super(int a)放在SubClass1中,它只访问或执行它扩展的子类中的构造函数。我可以直接在SubClass1中使用参数访问超类中的构造函数吗?

1 个答案:

答案 0 :(得分:1)

你不能跳过构造函数的级别:如果中间的类(即subclass)没有公开调用superclass的特定构造函数的构造函数,则subclass的子类没有更长的时间能够访问这些构造函数。

super关键字可让您完全跳过一级;不允许跳过多个级别。

此规则非常有意义:subclass1 subclass扩展superClass是一个实现细节。subclass1superClass调用superclass的构造函数超过其自己的超类的头部将破坏{{1}}的封装。