我有员工作为对象。每位员工都可以是经理或专员!
它依赖于值一变量int status
我会为经理做超级课程。如何禁止使用来自超类的关注方法?
答案 0 :(得分:0)
这听起来像你想要的那样:
超级课程:Staff.java
两个子类:Manager extends Staff
和Attendant extends Staff
- Manager.java
和Attendant.java
。
Manager
和Attendant
是两个不同的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
超类级别的功能移到那里。因此,对象将实例化Attendant
或Manager
,并且它只能使用其特定方法。在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
}
}