java - 使用构造函数创建新对象

标签 java constructor scjp

以下代码在编译和运行时给出的输出为“alpha subsub”。 SubSubAlpha(); 构造函数应将“subsub”添加到变量 s 中,这应该是输出。

为什么输出是“alpha subsub”?

class Alpha {
    static String s = " ";

    protected Alpha() {
       s += "alpha "; 
    }
}

public class SubSubAlpha extends Alpha {
    private SubSubAlpha() { 
       s += "subsub "; 
    }

    public static void main(String[] args) {
        new SubSubAlpha();
        System.out.println(s);
        // This prints as " alpha subsub".
        //Shouldn't this one be printed as " subsub"
        //Who made the call to Alpha(); ?
    }
}

最佳答案

当存在类层次结构时,子类的构造函数(在本例中为 SubSubAlpha)总是调用(首先)父类(super class)的构造函数,在本例中为 Alpha .

所以实际上发生的是:

private SubSubAlpha() { 
    super();
    s += "subsub ";
}

因此,这使得:

s += "alpha ";
s += "subsub ";

制作字符串“alpha subsub”

关于java - 使用构造函数创建新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16940646/

相关文章:

java - 以分钟为单位计算年数和天数

node.js - NodeJS : Can a static method call the constructor of the same class?

Scala:使用构造函数参数扩展具体类

java - Arrays.BinarySearch 是否要求数组按升序排序

Java 链接哈希集

Java方法调用重载逻辑

java - 添加要在 Jar 中构建的文本文件和图像 - Netbeans

java - String.replaceAll(regex) 进行两次相同的替换

java - PMD CallSuperInConstructor 是什么原因?

java - 有没有升级到java se 7程序员认证考试的书?