[英]Variable shadowing and inherit concrete method from abstract class in java
我正在处理一个具有像打击这样的类层次结构的作业:
抽象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优先级和compareTo(),则将compareTo放入我的所有子类中(难看的重复代码)。 它很好用...
有人可以帮我设计这个吗? 还是告诉我我错过了什么。
谢谢你的帮助!
字段在Java中不是多态的。 方法是。 将一个getPriority()
方法添加到Event
类,然后从compareTo
方法调用此方法。
然后,您将能够在子类中重写getPriority方法,并且将以多态方式调用相应的方法。 请注意,如果未从外部使用getPriority
方法,则可以将其设置为protected
。
旁注:请学习并遵守Java命名约定。 如果您使用的是真正的Java代码而不是晦涩的伪代码,那么更容易理解您的问题。
子类中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方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.