Java 调用子类中重写方法的超类构造函数-引用了谁的实例变量?

Java 调用子类中重写方法的超类构造函数-引用了谁的实例变量?,java,constructor,overriding,Java,Constructor,Overriding,我一直在看超类构造函数调用多态方法的代码 现在,您知道OrderManager类的方法启动是使用它自己的类的变量ior还是使用CorbaComponent类的变量ior吗 谢谢 class CorbaComponent { String ior; CorbaComponent() {startUp("IOR");} void startUp(String s){ior = s;} void print() {System.out.println(ior);} }

我一直在看超类构造函数调用多态方法的代码

现在,您知道OrderManager类的方法启动是使用它自己的类的变量ior还是使用CorbaComponent类的变量ior吗

谢谢

class CorbaComponent {
    String ior;
    CorbaComponent() {startUp("IOR");}
    void startUp(String s){ior = s;}
    void print() {System.out.println(ior);}
}

class OrderManager extends CorbaComponent {
    OrderManager(){}
    void startUp(String s) {ior = getIORfromURL(s);}
    String getIORfromURL(String s) {return "URL://" + s;}
}

public class Application {
    public static void main(String[] args) {start(new OrderManager());}
    static void start (CorbaComponent cc) {cc.print();}
}

在java中,字段扩展是不可能的。如果您声明了一个字段,根据其范围的定义,它是可用的。如果您在扩展类中声明一个辅助字段,它将是逻辑的,并且可以被java接受。 至于回答您的问题,在本例中,由于您是从
CorbaComponent
的结构调用方法
print
,您将看到
CorbaComponent
中定义的
ior
的值。由于没有字段继承,因此od
ior
的定义仅限于子类
OrderManager

如果您打算使用自己的变量(不要混淆,因为没有字段继承)。必须在子类中扩展
print
方法。

只有一个实例,因此只有一个变量。当您尝试代码时发生了什么,是什么让您感到困惑?不太清楚你在问什么。顺便说一句,我强烈建议您在将来以更传统的方式格式化代码。此外,您不应该从构造函数中调用可重写的方法。它在子类构造函数之前运行,您可以很容易地在重写方法中引入访问未初始化变量的问题。