子类和继承的麻烦

时间:2014-01-15 14:05:33

标签: java class subclass superclass

想象一下,我有一个超类Staff,它有通用变量,如姓名,地址等。 有4个子类DoctorNurseReceptionistOfficeManager,每个子类都有唯一的变量和方法。 此设置的问题是,Doctor也可以是OfficeManager,因此需要访问OfficeManager中的变量和方法 有没有办法让Doctor的实例可以访问OfficeManager中的方法? 将Staff作为超类,4个子类是理想的设计吗?

任何其他想法将不胜感激。

PS。我还没有开始编写代码,因为我仍然不知道设计阶段,即Classes。

7 个答案:

答案 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)

也许将工作本身视为可以装饰员工对象的角色。