回顾:员工角色
本课属于 Coddy Lua 学习旅程的“面向对象编程”单元。第 42 课,共 70 课。
挑战
简单让我们构建一个薪资奖金系统,展示不同类型的员工如何使用相同的接口,同时以不同的方式计算奖金!
你将在四个文件中创建一个简单的员工继承体系:
Employee.lua:表示普通员工的基类。构造函数:new(name, salary)应存储员工的姓名和薪资。添加一个:calculateBonus()方法,返回薪资的 10%(普通员工的默认奖金),再添加一个:getName()方法来获取姓名。Manager.lua:继承自 Employee 的子类。经理努力工作,也会得到奖励:重写:calculateBonus(),让它返回薪资的 20%,而不是默认的 10%。Intern.lua:另一个继承自 Employee 的子类。无论薪资是多少,实习生都会获得固定的50奖金:重写:calculateBonus(),让它始终返回这个金额。main.lua:把所有内容整合起来!读取 3 个员工姓名和 3 个薪资输入。创建一名 Manager、一名 Intern 和一名普通 Employee。把这三人存储在一个表中,然后通过循环逐个输出每个人的姓名和计算出的奖金。
你会收到 6 个输入:
- Manager 的姓名
- Manager 的薪资
- Intern 的姓名
- Intern 的薪资
- 普通员工的姓名
- 普通员工的薪资
对于员工集合中的每位员工(顺序为:Manager、Intern、Employee),按以下格式输出姓名和奖金:
{name}: {bonus}例如,如果输入是 Alice、5000、Bob、2000、Carol 和 3000,输出应为:
Alice: 1000
Bob: 50
Carol: 300注意,同一个 :calculateBonus() 调用会根据每位员工的类型产生不同结果,这就是多态!Manager 获得 5000 的 20%,Intern 获得固定的 50,普通 Employee 获得 3000 的 10%。
亲手试试
-- main.lua:把所有部分整合起来
local Employee = require('Employee')
local Manager = require('Manager')
local Intern = require('Intern')
-- 读取输入
local managerName = io.read()
local managerSalary = tonumber(io.read())
local internName = io.read()
local internSalary = tonumber(io.read())
local employeeName = io.read()
local employeeSalary = tonumber(io.read())
-- TODO:创建一个 Manager、一个 Intern 和一个普通的 Employee
-- TODO:将这三个对象按 Manager、Intern、Employee 的顺序存入表中
-- TODO:遍历表,打印每个人的姓名和奖金
-- 格式:{name}: {bonus}
面向对象编程中的所有课
自己练习: Lua 在线编译器