嗨,有人可以帮助我,我是新手程序员,我不明白以下代码。
one.bark()
如何在第一个if
条件下自动返回语句。编译器如何知道要显示哪个if语句(因为我们在调用bark()
时没有传递大小)?我知道该对象调用函数setSize
并将参数70
传递给它。这是否意味着值70
成为对象one
的一个属性?
代码:
class GoodDog {
private int size;
public void setSize(int s) {
size = s;
}
public int getSize()
{
return size;
}
void bark()
{
if (size > 60)
{
System.out.println("Wooof! Wooof!");
}
else if (size > 14)
{
System.out.println("Ruff! Ruff!");
}
else
{
System.out.println("Yip! Yip!");
}
}
}
class GoodDogTestDrive
{
public static void main (String[] args)
{
GoodDog one = new GoodDog();
one.setSize(70);
GoodDog two = new GoodDog();
two.setSize(8);
System.out.println("Dog one: " + one.getSize());
System.out.println("Dog two: " + two.getSize());
one.bark();
two.bark();
}
}
答案 0 :(得分:1)
是。当您致电one.setSize(70)
时,size
变量会在70
对象中保存为one
。当您致电one.bark()
时,size
仍为70
答案 1 :(得分:0)
创建类的对象时,该对象会收到该类的所有非静态成员的副本。
GoodDog one = new GoodDog();
对象一个包含一个特殊的大小副本。像明智的对象两个将拥有自己的成员变量大小的副本。
使用setSize()函数设置大小时,一个对象的大小变量将被修改,并包含相同的值,直到分配了另一个值。
当你使用一个函数调用bark函数时,它会自己复制size变量并在bark函数中使用。
答案 2 :(得分:0)
实际上,70
不是新属性,但size
属性的值为70
。
由于GoodDog有两个不同的实例(Dog one
和Dog two
),每个实例都有自己的属性size
,它有自己的值(在这种情况下{{1} }和70
)。
从那里,当您调用8
方法时,每个实例(bark
/ one
)将根据其自身属性的值(分别为{two
}检查if/else
语句{1}} / 70
)。