1
public class Shape{

    public int xPos = 10;
    public int yPos = 20;

    Shape(){

    }

    public int getXpos(){
        return xPos;
    }

    public void setXpos(int x){
        this.xPos = x;
    }

    public int getYpos(){
        return yPos;
    }

    public void setYpos(int y){
        this.yPos = y;
    }

}

public class Shape1 extends Shape{

    Shape1(){
        xPos = 100;
        yPos = 200;
    }

}

public class Test{

    public static void main(String[] args) {
        Shape1 shape1 = new Shape1();

        System.out.println(shape1.getXpos());
    }

}

結果として100ではなく10を取得するのはなぜですか?

4

1 に答える 1

4

今私の質問は:なぜ私は結果として100ではなく10を得るのですか?

提示されたコードは100を出力します。最も可能性の高い説明は、実行していると言っているコードを実行していないということです。これは、コピーアンドペーストエラー、展開の問題などが原因で発生する可能性があります。

あまり知られていないが厄介な方法の1つは、コードを微妙に変更して印刷することです。これは、のコンストラクターの前に10追加することです。voidShape1

void Shape1() {
    xPos = 100;
    yPos = 200;
}

これShape1()は、コンストラクターから通常のメソッドに変換されます(オブジェクトの構築中に自動的に呼び出されることはありません)。

私のコンパイラはこの変更を受け入れ、実行するとコードが出力され10ます。

私は実際にこれによって引き起こされた本当のバグに対処しなければなりませんでした。見つけるのに少し時間がかかりました、私はあなたに言うことができます。

于 2012-05-03T17:01:18.950 に答える