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执行官说时间点已经结束了。这并不含糊。