是否可以使用扩展超类’方法参数的参数覆盖超类’方法?

说我有一个这样的课:

abstract class Something {} 

它有一个延伸它的类的层次结构:

 class FirstSomething extends Something {} class SecondSomething extends Something {} 

然后在其他地方,我有一个课程利用这些东西:

 abstract class A { public void setSomething(Something something) { //Process the something } } 

我能够指定A的子类,以便它覆盖setSomething方法,使用更具体的“某事”类吗? 这是我希望能够做到的:

 class B extends A { @Override public void setSomething(FirstSomething something) { //Process the something } class C extends A { @Override public void setSomething(SecondSomething something) { //Set the something } 

目前我正在Aclass做类似的事情:

 public void setSomething(Something something) { checkClass(something); //Use the something } protected abstract void checkClass(Something something); 

如果SuperSomething的类型不是那些类的正确类型,则B类和C类在checkClass方法中抛出exception。

编辑:我已尝试使用上面的确切方法签名,但子类方法不会覆盖超级方法,我想我真的在问:有没有办法在超类的定义中指定一个方法,其中有一个方法编译时检查超类的子类的setSomething方法中允许的对象类型?

您可以通过指定类型可以是Something或其子类之一来使A类成为通用的(我已经使setSomething方法成为抽象,但如果需要,您可以提供实现)。

 abstract class A  { public abstract void setSomething(T something); } 

然后强制类型T成为子类中所需的特定类。

 class B extends A { @Override public void setSomething(FirstSomething something) { //Set the something } } class C extends A { @Override public void setSomething(SecondSomething something) { //Set the something } }