您的实际问题是您的假设是错误的:电路中的导体不是由其电阻,电流和电压定义的,而只是其中的任何两个:第三个(无论哪个)都由其他值所暗示。因此,您只需要两个属性来描述您的导体的完全确定的状态。让我们resistance
为voltage
简单起见。然后,为了强制电流和电压之间的关系,您可以编写:
public class Conductor
{
private float resistance;
private float voltage;
public void setVoltage( float voltage )
{
this.voltage = voltage;
}
public float getVoltage()
{
return voltage;
}
public float getCurrent()
{
return getVoltage() / getResistance();
}
public void setCurrent( float current )
{
this.voltage = current * getResistance();
}
public void setResistance( float resistance )
{
this.resistance = resistance;
}
public void setResistance( float current, float voltage )
{
setResistance( voltage / current );
}
public float getResistance()
{
return resistance;
}
}
对于任何进一步的设置器,例如根据导线长度、直径和电阻常数设置导体的电阻,您不需要任何新属性(!),而只需要设置器本身:
public void setResistance( float constant, float diameter, float length )
{
this.resistance = constant * length / ( 2 * Math.PI * diameter * diameter );
}
对于其他吸气剂也是如此:
public float getResistanceConstant( float diameter, float length )
{
return ( getResistance() * ( 2 * Math.PI * diameter * diamter ) ) / length;
}
如果您仍然需要将直径存储为属性,则应Wire
从派生一个类Conductor
,因为并非每个导体的电阻都由其长度、直径和电阻常数定义,而仅由导线的电阻定义。但请记住:同样,您不需要将所有三个值都存储为参数,而只需要存储其中两个 - 第三个值已经隐式定义,因为您将阻力作为属性。