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());
    }

}

为什么我得到 10 而不是 100?

4

1 回答 1

4

现在我的问题是:为什么我得到 10 而不是 100?

显示的代码打印出 100。最可能的解释是您没有运行您说正在运行的代码。这可能是由于复制和粘贴错误、部署问题等而发生的。

可以巧妙地修改代码以打印的一种鲜为人知但令人讨厌的方法是在的构造函数前面10添加:voidShape1

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

Shape1()从构造函数转换为普通方法(在对象构造期间不会自动调用)。

我的编译器接受了这个修改,10当我运行它时代码会打印出来。

实际上,我曾经不得不处理一个由此引起的真正错误。花了一点时间发现,我可以告诉你。

于 2012-05-03T17:01:18.950 回答