超类构造函数在子类中调用重写方法 - 其实例变量是否被引用?

时间:2017-03-04 08:44:26

标签: java constructor override

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

现在,您知道OrderManager类的方法startUp是否与其自己的类或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();}
}

1 个答案:

答案 0 :(得分:0)

在java中,字段扩展是不可能的。如果声明一个字段,则根据其范围按定义可用。如果在扩展类中声明辅助字段,那么它将是合乎逻辑的,并且可以被java接受。 至于回答您的问题,在这种情况下,因为您从print的结构调用方法CorbaComponent,您将看到ior中定义的CorbaComponent的值。由于没有字段继承,因此定义od ior仅限于子类OrderManager。 如果你打算使用自己的变量(不要混淆 - 因为没有字段继承)。您必须在子类中扩展print方法。