0

虽然这是一个新手问题,但我对如何读取变量的值感到困惑?

int a = 7;

它是从左到右还是从右到左?

还有这个:

//X is a supper class of Y and Z which are sibblings.
public class RunTimeCastDemo {

    public static void main(String args[]) {
            X x = new X();
            Y y = new Y();
            Z z = new Z();
            X xy = new Y(); // compiles ok (up the hierarchy)
            X xz = new Z(); // compiles ok (up the hierarchy)
            //      Y yz = new Z();   incompatible type (siblings)
            //      Y y1 = new X();   X is not a Y
            //      Z z1 = new X();   X is not a Z
            X x1 = y; // compiles ok (y is subclass of X)
            X x2 = z; // compiles ok (z is subclass of X)
            Y y1 = (Y) x; // compiles ok but produces runtime error
            Z z1 = (Z) x; // compiles ok but produces runtime error
            Y y2 = (Y) x1; // compiles and runs ok (x1 is type Y)
            Z z2 = (Z) x2; // compiles and runs ok (x2 is type Z)
            //      Y y3 = (Y) z;     inconvertible types (siblings)
            //      Z z3 = (Z) y;     inconvertible types (siblings)
            Object o = z;
            Object o1 = (Y) o; // compiles ok but produces runtime error
        }
    }

我不明白如何读取超类 = 新子类

 X xy = new Y(); // compiles ok (up the hierarchy)
    X xz = new Z(); // compiles ok (up the hierarchy)

(如果 X 是它们的超类,为什么它会在层次结构中向上?它不应该向下吗?)

4

1 回答 1

2

...如何读取变量的值?

对于=(赋值)操作,右侧的值被评估并存储到左侧的变量中。因此,在您的示例中,7首先评估并存储到a. 如果右手边更复杂,它会在存储到左边的变量之前从左到右进行评估。

如果 X 是它们的超类,为什么它会在层次结构之上?不应该倒下吗?

允许将子类存储为其超类,因为子类实现了超类的所有功能。因此,如果X定义了 method Test(),并且Y是 的子类X,那么Y也实现了该方法。因此,您可以拥有 的实例Y并将其存储在类型为的变量中,X因为 的所有X功能都在Y.

于 2013-04-27T20:17:05.307 回答