受保护的私有构造函数

时间:2014-08-23 04:39:40

标签: java class constructor

这个受保护的私有构造函数组合是如何工作的?

class ClassA {
    public int numberOfInstances;
    protected ClassA(int numberOfInstances) {
        this.numberOfInstances = numberOfInstances;
    }
}
public class ExtendedA extends ClassA {
    private ExtendedA(int numberOfInstances) {
         super(numberOfInstances);
    }
}
public static void main(String[] args) {
    ExtendedA ext = new ExtendedA(420);
    System.out.print(ext.numberOfInstances);
}

1 个答案:

答案 0 :(得分:2)

我已经看到了这个问题,这是准备SUN认证的众多样本问题之一。您可以在此文档中找到问题:Sun Certification

有些网站有这个问题,但是它们缺少组件或写得不正确而无法编译,但答案仍然是420;

我将假设OP副本并粘贴其中一个网站的代码。

正确的代码应该是两个单独的类,写成:

class ClassA {

    public int numberOfInstances;

    protected ClassA(int numberOfInstances) {

        this.numberOfInstances = numberOfInstances;
    }
}

public class ExtendedA extends ClassA {

    private ExtendedA(int numberOfInstances) {

         super(numberOfInstances);
    }

    public static void main(String[] args) {

        ExtendedA ext = new ExtendedA(420);
        System.out.print(ext.numberOfInstances);
    }
}

回答有关其工作原理的问题:

子类可以通过调用super(...)来访问其Parent的构造函数,因此在这种情况下将 420 分配给 numberOfInstances 。如果您不熟悉继承,我建议您自己研究,但是,为了简短,子类或子类继承其父级的所有公共成员和受保护成员。

因此,当您调用 ext.numberOfInstances 时,输出将为420.通过首先调用子类构造函数来分配该值,然后子类构造函数使用 super调用父构造函数(420 )然后将值分配给 numberOfInstances