Java 子类和继承的问题

Java 子类和继承的问题,java,class,subclass,superclass,Java,Class,Subclass,Superclass,假设我有一个超类Staff,它有通用变量,比如名称、地址等。 共有4个子类医生,护士,接待员和办公室管理人员,每个子类都有唯一的变量和方法。 此设置的问题是,Doctor也可以是OfficeManager,因此需要访问OfficeManager中的变量和方法 医生实例是否有办法访问OfficeManager中的方法? 将Staff作为超类和4个子类是理想的设计吗 如有其他想法,将不胜感激 另外,我还没有开始起草代码,因为我还不知道设计阶段,即类。使用接口。让您的接口要求您为希望在类中具有公共属性

假设我有一个超类
Staff
,它有通用变量,比如名称、地址等。 共有4个子类
医生
护士
接待员
办公室管理人员
,每个子类都有唯一的变量和方法。 此设置的问题是,
Doctor
也可以是
OfficeManager
,因此需要访问
OfficeManager
中的变量和方法 医生实例是否有办法访问OfficeManager中的方法? 将
Staff
作为超类和4个子类是理想的设计吗

如有其他想法,将不胜感激


另外,我还没有开始起草代码,因为我还不知道设计阶段,即类。

使用接口。让您的接口要求您为希望在类中具有公共属性的每个属性实现get方法。然后,您可以在一个具体类甚至抽象类中实现多个接口。

如果多个子类需要相同的功能,则应将该功能移动到Staff类或Staff与Doctor之间的某个级别。这取决于功能和意图。子类之间不应该互相知道,这样会破坏整个想法

如果
医生
也可以是
办公室管理者
他们肯定应该是接口。这样,您就可以拥有类似于:

public class VeryImportantPerson implements Doctor, OfficeManager {

否则,您使用
Staff
界面和其他4个扩展界面的方法听起来不错。

如果一个类既可以是医生也可以是办公室经理,那么它们就不应该是类。你可以把它们做成接口


或者,您可以更改类层次结构以表示职责而不是人员。然后,您可以拥有一个包含职责列表的Person类。

您应该创建一个名为ROLE的枚举,该枚举具有枚举值,例如:医生、护士、办公室经理,并且员工的实例应该拥有一组角色

这样,例如在Staff类中找到的方法中,您可以:

public void fireEveryoneAndSetTheBuildingOnFire(){
    if(!thisPersonHoldsOfficeManagerRole()){
        // Exception here.. Required role not found..
    }

    fireEveryone();
    setTheBuildingOnFire();
}

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

为每个子类创建一个接口,该接口具有它可以执行的功能,当您创建一个实现“Manager”接口的医生类时,它将可以访问Manager功能 如果需要更复杂的东西,可能需要重新考虑层次结构 比如说

*Staff
 -management
    *Manager
    *recieption

  -practioner
    *doctor
    *nurse

通用变量?当你描述你的问题时要小心关键词。是的,我的意思是就像标准变量一样,所有子类都有共同点。你会如何使用它?您是否拥有一个staff对象数组,并将其强制转换为Doctor以使用
curePeople()
方法,还是将其强制转换为OfficeManager以使用
manageOffice()
方法?它们会有唯一的公共方法,还是只有唯一的私有方法和相同公共方法的不同实现?这个设计的目的是什么?@user3074612在Java中有一个称为
泛型的概念,稍后您可能会介绍它。Keppil的意思是只有在处理Java泛型时才应该使用泛型这个词;患者、处方等和办公室经理都会有一个方法manageRecords(),也许您应该详细说明如何实现这一点。现在,这有点太短了,不能成为一个真正的答案。这样,每个新的角色组合都应该在代码中创建,而不是在运行时创建?当心!