Java抽象类USA_Tax的变量未在子类California_Tax中正确生效的问题
子类变量未完成赋值操作
你可能仅声明了after_california_tax和total_money_left这两个实例变量,但未在子类的构造方法、税费计算方法中对其赋值。比如只写了double after_california_tax;,却没有执行after_california_tax = 薪资 - 加州税额;这类赋值逻辑,变量会保持默认初始值0.0。另外要检查是否把赋值符号=误写成了比较符号==,这种低级错误也会导致变量未被正确赋值。子类方法重写异常或逻辑缺失
如果父类定义了抽象计算方法,子类重写时要确保逻辑覆盖子类专属的税费计算。比如父类的calculateTax()仅处理联邦税,子类重写时必须补充加州税的计算逻辑并同步赋值给子类变量。同时要注意方法签名完全一致(参数类型、数量、返回值都要匹配),否则子类的方法不会被调用,自然也不会更新变量值。方法调用顺序错误
若你先输出after_california_tax和total_money_left,再调用计算税费的方法,此时变量还未被计算赋值,输出的就是初始的0.0。必须保证先执行计算逻辑,再读取变量值。变量作用域混淆
检查子类是否在方法内部重新声明了同名局部变量,比如在计算方法里写double after_california_tax = ...;,这样修改的是局部变量,而非类的实例变量,外部读取实例变量时依然是0.0。另外如果父类的薪资变量是private权限,子类未通过getter方法获取正确的薪资值,而是自己声明了未赋值的薪资变量,计算时会用0代入,结果也会是0.0。计算逻辑错误
排查加州税的计算公式,比如是否误将税率设为0,或者引用了未初始化的税率变量(默认0.0),导致扣税金额为0,甚至出现after_california_tax = 0 - 0这类错误逻辑,最终变量值为0.0。
内容的提问来源于stack exchange,提问作者John H.

