繁体   English   中英

可变阴影并从Java抽象类继承具体方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM