Java 二传手不工作
为什么我的成绩是10而不是100 现在我的问题是:为什么我的成绩是10而不是100 显示的代码打印出100。最可能的解释是,您没有运行您所说的正在运行的代码。这可能是由于复制和粘贴错误、部署问题等造成的 一种鲜为人知但令人讨厌的方法是,在Java 二传手不工作,java,Java,为什么我的成绩是10而不是100 现在我的问题是:为什么我的成绩是10而不是100 显示的代码打印出100。最可能的解释是,您没有运行您所说的正在运行的代码。这可能是由于复制和粘贴错误、部署问题等造成的 一种鲜为人知但令人讨厌的方法是,在Shape1的构造函数前面添加void,可以巧妙地修改代码以打印10: public class Shape{ public int xPos = 10; public int yPos = 20; Shape(){ }
Shape1
的构造函数前面添加void
,可以巧妙地修改代码以打印10
:
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());
}
}
这将Shape1()
从构造函数转换为普通方法(在对象构造期间不会自动调用)
我的编译器接受这个修改,当我运行它时,代码会打印出10
事实上,我曾经不得不处理一个由这个引起的真正的bug。我可以告诉你,我花了一点时间才发现
现在我的问题是:为什么我的成绩是10而不是100
显示的代码打印出100。最可能的解释是,您没有运行您所说的正在运行的代码。这可能是由于复制和粘贴错误、部署问题等造成的
一种鲜为人知但令人讨厌的方法是,在Shape1
的构造函数前面添加void
,可以巧妙地修改代码以打印10
:
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());
}
}
这将Shape1()
从构造函数转换为普通方法(在对象构造期间不会自动调用)
我的编译器接受这个修改,当我运行它时,代码会打印出10
事实上,我曾经不得不处理一个由这个引起的真正的bug。我可以告诉你,我花了一点时间才发现。这甚至不是有效的Java。让我们看看你正在运行的实际代码。我想这是家庭作业吗?好像是这样。应该标记为1。不,我只是在做我自己的程序。你确定这就是你的全部代码吗?实际上我无法复制,它对我来说工作正常,输出100。这甚至不是有效的Java。让我们看看你正在运行的实际代码。我想这是家庭作业吗?好像是这样。应该标记为一个。不,我只是在做我自己的程序。你确定这就是你的全部代码吗?实际上我无法复制,它对我来说运行良好,输出100.void Shape1()-为什么你要将构造函数更改为方法?你真的读过答案吗?他的全部观点是,编写的代码是正确的……但这一微小的更改将导致代码以问题描述的方式中断。意思与原来的(问题前的)代码很可能是错误的。dude ans很好,我同意上面所描述的(+1)。但问题是为什么我得到的是10而不是100?也许他/她想要解释,我想/@Quoi:答案中就有解释。如果构造函数意外地变成了一个方法(例如,通过在它前面粘贴
void
),那么它在构造过程中不会被调用——因此字段不会从基类将其设置为的值更改。void Shape1()-为什么要将构造函数更改为method?你真的读过答案吗?他的全部观点是,编写的代码是正确的……但这一微小的更改将导致代码以问题描述的方式中断。意思与原来的(问题前的)代码很可能是错误的。dude ans很好,我同意上面所描述的(+1)。但问题是为什么我得到的是10而不是100?也许他/她想要解释,我想/@Quoi:答案中就有解释。如果构造函数意外地变成了一个方法(例如,通过在它前面粘贴void
),那么它在构造过程中不会被调用——因此字段不会改变基类设置的值。