变量阴影并从java中的抽象类继承具体方法

时间:2012-02-04 08:52:39

标签: java oop polymorphism abstract-class

我正在进行的作业有一个类层次结构,比如打击:

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放入我的所有子类中(丑陋的重复代码)。它运作得很好......

有人可以帮我设计一下吗?或者告诉我我错过了什么..

感谢您的帮助!

2 个答案:

答案 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方法是另一个主题。