题目要求
实现一个
BankAccount
类和一个SavingsAccount
类:BankAccount 类
私有方法:
validateAmount(amount)
检查金额是否为正数(返回布尔值)
不能被外部和子类直接访问
公有方法:
deposit(amount)
:存款
调用
validateAmount
验证金额有效则增加余额并打印成功信息
无效则打印错误信息
withdraw(amount)
:取款
验证金额并检查余额是否足够
有效则减少余额并打印成功信息
无效则打印错误信息
属性:
balance
(余额):初始化为0,外部不能直接修改SavingsAccount 类(继承自 BankAccount)
重写
withdraw
方法:
在调用父类的
withdraw
前检查:
取款后余额是否 >= 100(储蓄账户最低余额要求)
如果低于100则打印错误信息
否则调用父类的
withdraw
--BankAccount.lua-- local BankAccount = {} BankAccount.__index = BankAccount local function validateAmount(amount) return type(amount) == "number" and amount > 0 and true or false end function BankAccount:new() local obj = { balance = 0 } setmetatable(obj, self) self.__index = self return obj end function BankAccount:deposit(amount) if validateAmount(amount) then self.balance = self.balance + amount print("成功存入:"..amount..",当前余额:"..self.balance) else print("金额有误,请确认金额数大于0") end end function BankAccount:withdraw(amount) if validateAmount(amount) then if self.balance >= amount then self.balance = self.balance - amount print("成功取款:"..amount..",当前余额为:"..self.balance) else print("余额不足") end else print("金额有误,请确认金额数大于0") end end return BankAccount
--SavingsAccount.lua-- local BankAccount = require("BankAccount") local SavingsAccount = {} SavingsAccount.__index = SavingsAccount setmetatable(SavingsAccount, {__index = BankAccount}) function SavingsAccount:new() local obj = BankAccount:new() setmetatable(obj, self) self.__index = self return obj end function SavingsAccount:withdraw(amount) if self.balance - amount >= 100 then BankAccount:withdraw(amount) else print("取款失败,取款后的余额不得小于100") end end -- 测试 BankAccount local ba = BankAccount:new() ba:deposit(200) -- 存款成功,余额200 ba:withdraw(50) -- 取款成功,余额150 ba:withdraw(200) -- 取款失败,余额不足 -- 测试 SavingsAccount local sa = SavingsAccount:new() sa:deposit(500) -- 存款成功,余额500 sa:withdraw(450) -- 取款失败:储蓄账户需保留至少100元余额 sa:withdraw(400) -- 取款成功,余额100 sa:withdraw(1) -- 取款失败:储蓄账户需保留至少100元余额 -- 测试直接访问私有方法(应该报错) ba.validateAmount(100) -- 报错:attempt to call method 'validateAmount' (a nil value)