【Lua】题目小练10
题目要求
实现一个
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 = BankAccountlocal function validateAmount(amount)return type(amount) == "number" and amount > 0 and true or false endfunction BankAccount:new()local obj = {balance = 0}setmetatable(obj, self)self.__index = selfreturn obj endfunction BankAccount:deposit(amount)if validateAmount(amount) thenself.balance = self.balance + amountprint("成功存入:"..amount..",当前余额:"..self.balance)elseprint("金额有误,请确认金额数大于0")end endfunction BankAccount:withdraw(amount)if validateAmount(amount) thenif self.balance >= amount thenself.balance = self.balance - amountprint("成功取款:"..amount..",当前余额为:"..self.balance)elseprint("余额不足")endelseprint("金额有误,请确认金额数大于0")end endreturn 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 = selfreturn obj endfunction SavingsAccount:withdraw(amount)if self.balance - amount >= 100 thenBankAccount:withdraw(amount)elseprint("取款失败,取款后的余额不得小于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)