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メソッド を定義しTest()Yが のサブクラスであるX場合はY、メソッドも実装します。したがって、のすべての機能が で使用できるため、 のインスタンスをY取得し、それを for 型の変数に格納できます。XXY

于 2013-04-27T20:17:05.307 に答える