我正在进行的作业有一个类层次结构,比如打击:
abstract EventClass
someEventClass1扩展了EventClass
someEventClass2扩展了EventClass
内部简要说明:
abs EventClass{
//not in use just make it compile
int priority;
concrete compareTo(){
//need access priority when working in subclass}
}
someEventClass1 extends EventClass{
int priority;
}
在我的EventClass中我有一个具体的方法compareTo(Event in),我希望它继承所有子类
它将比较不同事件的优先级(int)。 显然,在这个方法里面我需要访问子类中的优先级。为了使它能够编译,我必须在EventClass中添加一个int优先级,我想我可以在子类中对它进行浅化,并且它可以在compareTo继承的情况下正常工作。
然而,它没有正常工作,似乎compareTo无效。
如果我在EventClass中删除了int priority和compareTo(),请将compareTo放入我的所有子类中(丑陋的重复代码)。它运作得很好......
有人可以帮我设计一下吗?或者告诉我我错过了什么..
感谢您的帮助!
答案 0 :(得分:0)
字段在Java中不是多态的。方法是。向getPriority()
类添加Event
方法,并从compareTo
方法调用此方法。
然后,您将能够覆盖子类中的getPriority方法,并以多态方式调用相应的方法。请注意,如果未在外部使用getPriority
方法,则可以将其设为protected
。
旁注:请学习Java命名约定并坚持使用它们。如果您使用真正的Java代码而不是模糊的伪代码,那么理解您的问题会更容易。
答案 1 :(得分:0)
来自超类的子类shadow int priority
中的int priority
的附加声明。
试试这个:
abstract class Event {
protected int priority;
public int compareTo(Object other) {
Event ev = (Event) other;
return priority - ev.priority;
}
}
class SomeEvent extends Event {
}
您是将priority
声明为protected
还是private
并提供相应的getter方法是另一个主题。