想象一下,我有一个超类Staff
,它有通用变量,如姓名,地址等。
有4个子类Doctor
,Nurse
,Receptionist
和OfficeManager
,每个子类都有唯一的变量和方法。
此设置的问题是,Doctor
也可以是OfficeManager
,因此需要访问OfficeManager
中的变量和方法
有没有办法让Doctor的实例可以访问OfficeManager
中的方法?
将Staff
作为超类,4个子类是理想的设计吗?
任何其他想法将不胜感激。
PS。我还没有开始编写代码,因为我仍然不知道设计阶段,即Classes。
答案 0 :(得分:1)
如果Doctor
也可以是OfficeManager
,那么它们绝对应该是接口。这样你可以得到类似的东西:
public class VeryImportantPerson implements Doctor, OfficeManager {
否则,使用Staff
界面和4个其他界面扩展它们的方法听起来不错。
答案 1 :(得分:0)
使用接口。让您的界面要求您为类中希望具有的每个属性实现get方法。然后,您可以在具体甚至抽象类中实现多个接口。
答案 2 :(得分:0)
如果有几个子类需要相同的功能,那么该功能应该移动到Staff类或者工作人员之间的某个级别,例如医生。这取决于功能和意图。但是,子类不应该彼此了解,这种想法会破坏整个想法。
答案 3 :(得分:0)
如果一个类既可以是Doctor又可以是OfficeManager,那么它们就不应该是类。你可以把它们作为接口。
或者,您可以更改类层次结构以代表职责而不是人。然后你可以有一个包含职责列表的Person类。
答案 4 :(得分:0)
你应该创建一个名为ROLE的ENUM,它具有枚举值,如:DOCTOR,NURSE,OFFICE_MANAGER,以及Staff的实例应该拥有一组ROLE。
这种方式,例如在Staff类中找到的方法中,您可以:
public void fireEveryoneAndSetTheBuildingOnFire(){
if(!thisPersonHoldsOfficeManagerRole()){
// Exception here.. Required role not found..
}
fireEveryone();
setTheBuildingOnFire();
}
答案 5 :(得分:0)
为每个子类创建一个接口,使用它可以执行的功能,当您创建一个医生类实现“Manager”接口时,它将可以访问管理器功能 如果您需要更复杂的东西,您可能需要重新考虑层次结构 比如,例如
*Staff
-management
*Manager
*recieption
-practioner
*doctor
*nurse
答案 6 :(得分:-2)
也许将工作本身视为可以装饰员工对象的角色。