Menu
CoddyTech

回顾:员工角色

本课属于 Coddy Lua 学习旅程的“面向对象编程”单元。第 42 课,共 70 课。

challenge icon

挑战

简单

让我们构建一个薪资奖金系统,展示不同类型的员工如何使用相同的接口,同时以不同的方式计算奖金!

你将在四个文件中创建一个简单的员工继承体系:

  • 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 个输入:

  1. Manager 的姓名
  2. Manager 的薪资
  3. Intern 的姓名
  4. Intern 的薪资
  5. 普通员工的姓名
  6. 普通员工的薪资

对于员工集合中的每位员工(顺序为: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 在线编译器