Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 构造函数可以覆盖其实例吗_Java - Fatal编程技术网

Java 构造函数可以覆盖其实例吗

Java 构造函数可以覆盖其实例吗,java,Java,我正在做一个游戏,这个问题出现了:如果一个变量被设置为一个类的实例,而这个类构造函数设置了这个变量,那么这个变量最终是什么?例如: public class MainClass { public static MainInterface mainInterface; public static void main(String[] args) { mainInterface = new SubClass1(); } } public interface

我正在做一个游戏,这个问题出现了:如果一个变量被设置为一个类的实例,而这个类构造函数设置了这个变量,那么这个变量最终是什么?例如:

public class MainClass {
    public static MainInterface mainInterface;
    public static void main(String[] args) {
        mainInterface = new SubClass1();
    }
}

public interface MainInterface {
    public void method();
}

public class SubClass1 implements MainInterface {
    public SubClass1() {
        MainClass.mainInterface = new SubClass2();
    }
    public void method() { }
}

public class SubClass2 implements MainInterface {
    public void method() { }
}

因此,在本例中,mainInterface是子类1还是子类2的实例?

测试它并找出答案!:一个简单的System.out.PrintLMainInterface.getClass将打印出类值

我相当肯定,这个过程是这样的:

调用子类1的构造函数,将mainInterface设置为新的 子类2对象。 子类1的构造函数完成并被分配给mainInterface,导致mainInterface成为新创建的子类1对象。
最佳答案:当你测试这个时会发生什么?此外,也许您应该使用静态工厂方法并保持构造函数的私有性。您可以在调试器中逐步完成此操作,并查看它将如何工作它将是子类1,因为子类2将在构造函数完成时被覆盖。mainInterface是子类1的实例还是子类2的实例,这取决于我们执行的时间点。@Pshemo执行官说时间点已经结束了。这并不含糊。