如何禁止某些对象使用超类中的某些方法?

时间:2016-05-12 15:27:27

标签: java

我有员工作为对象。每位员工都可以是经理或专员!

它依赖于值一变量int status

我会为经理做超级课程。如何禁止使用来自超类的关注方法?

3 个答案:

答案 0 :(得分:0)

这听起来像你想要的那样:

超级课程:Staff.java

两个子类:Manager extends StaffAttendant extends Staff - Manager.javaAttendant.java

ManagerAttendant是两个不同的java类/文件。他们在层次结构中没有关联。因此Attendant使用来自Manager的内容不存在风险。

如果存在层次结构,则只有子类使用来自超类的东西的风险。您的问题并未明确您所关注的层次结构。

答案 1 :(得分:0)

子类的方法对于超类是不可见的,所以如果你为管理器创建了一些超类,那么超类就不可能看到管理器和管理者的方法。因此无需禁止任何事情。

答案 2 :(得分:0)

我想你的意思是你要创建一个Manager类的Staff 子类

您应该在Manager课程中实施Manager具体方法,然后覆盖提供虚拟实施的“不允许的方法”,例如return null;throw new ActionNotSupported();

E.g。

public class Manager extends Staff {
    public void manage() {
        //OK the manager can manage... provide an implementation
    }

    @Override
    public void pickUpHeavyThings() {
        // The manager cannot do that... (no offence) so:
        throw new InvalidActionException();
    }
}

修改

当然,最好的解决方案是重构代码并为Attendant创建另一个子类,从而将Staff超类级别的功能移到那里。因此,对象将实例化AttendantManager,并且它只能使用其特定方法。在Staff类级别(应该是抽象的),应该只保留通用方法,例如。

public abstract class Staff {
    public void getPaid() {
        // everybody can do this
    }

    public void goForLunch() {
        // everybody can do this - if he wants
    }
}

然后:

public class Manager extends Staff {
    public void manage() {
        //OK the manager can manage... provide an implementation
    }
}

public class Attendant extends Staff {
    public void pickUpHeavyThings() {
        // OK, the attendant can do this... provide an implementation
    }
}