Java 你能告诉我这个计划是如何运作的吗?
如果Java 你能告诉我这个计划是如何运作的吗?,java,object,instance,inner-classes,Java,Object,Instance,Inner Classes,如果s1引用的是由f1.switch()创建的新对象,则 (1) 变量runningStatus如何传递给为内部类创建的新对象? (2) 变量runningStatus的变化是如何在内部类的对象(由s1引用)中完成的,反映在f1引用的Fan对象中 interface Switch { void on(); void off(); } class Fan { private boolean runningStatus; public Switch getSwitc
s1
引用的是由f1.switch()
创建的新对象,则
(1) 变量runningStatus
如何传递给为内部类创建的新对象?
(2) 变量runningStatus
的变化是如何在内部类的对象(由s1引用)中完成的,反映在f1引用的Fan对象中
interface Switch
{
void on();
void off();
}
class Fan
{
private boolean runningStatus;
public Switch getSwitch()
{
return new Switch()
{
public void on()
{
runningStatus = true;
}
public void off()
{
runningStatus = false;
}
};
}
public boolean getRunningStatus()
{
return runningStatus;
}
}
class FanStatus
{
public static void main(String[] args)
{
Fan f1 = new Fan();
Switch s1 = f1.getSwitch();
s1.on();
System.out.println(f1.getRunningStatus());
s1.off();
System.out.println(f1.getRunningStatus());
}
}
交换机实例正在访问风扇的runningStatus,它不像参数那样被传递
(2) How is change in variable runningStatus done in object of inner class (referred by s1), reflecting in the object of Fan referred by f1?
当Switch实例更改Fan实例中的变量时,它实际上是同一个变量。它不是“按值传递”或“按引用传递”,更像是:
f1.getSwitch().on()
~ is equivalent to ~
f1.switch.runningStatus = true
runningStatus
共享相同的作用域,因此它对内部类可见。将内部类视为Fan
对象中的另一个变量getSwitch()
返回调用该方法时实例化的Switch
对象的引用。因此,对s1
进行任何更改都意味着您实际上在Fan
实例内更改开关
对象的属性,在本例中为f1
,这将有效地更改f1
的属性内部类可以访问其封闭的外部类实例变量。他们可以修改它们代码>。您会注意到,您不能这样做,因为
开关
不是静态类
。由于它不是静态的,类开关
基本上是风扇内部的“助手”或“容器”,用于组织代码。这就是ergonaut用f1.switch.runningStatus=true表达的内容。
f1.getSwitch().on()
~ is equivalent to ~
f1.switch.runningStatus = true