【发布时间】:2015-10-28 15:07:49
【问题描述】:
如果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());
}
}
【问题讨论】:
-
内部类可以访问其封闭的外部类实例变量。他们可以修改它们。
-
试试
Switch mySwitch = new Switch();。你会注意到你不能这样做,因为Switch不是static class。由于它不是静态的,Switch类基本上是Fan内的“帮助器”或“容器”来组织您的代码。这就是 ergonaut 用f1.switch.runningStatus = true表达的意思。
标签: java object instance inner-classes