Java 动态转换为子类以使用正确的方法重载

Java 动态转换为子类以使用正确的方法重载,java,inheritance,polymorphism,Java,Inheritance,Polymorphism,我正在努力使我的代码更加多态。现在我有一个超类,它有四个不同的子类。我有一个接受超类作为类型的方法。我想先执行一些常规操作,然后再将其路由到其他方法来处理其他操作。以下是我的设想: public void performSomething(Super object) { //do some generic action each time to object object.setSuperProperty(); //now route to appropriate m

我正在努力使我的代码更加多态。现在我有一个超类,它有四个不同的子类。我有一个接受超类作为类型的方法。我想先执行一些常规操作,然后再将其路由到其他方法来处理其他操作。以下是我的设想:

public void performSomething(Super object) { 
    //do some generic action each time to object
    object.setSuperProperty();

    //now route to appropriate method to perform specific action
    doSpecific(object);
}

private void doSpecific(SubA object) { }

private void doSpecific(SubB object) { }

private void doSpecific(SubC object) { }

private void doSpecific(SubD object) { }
这样,如果我想添加更多的功能——通过创建一个新的子类或其他什么——那么我只需要添加另一个具有正确子类类型的方法。但是,这是不可能的,因为编译器抱怨没有
doSpecific(超级对象)
方法。相反,在
performSomething(超级对象)
中,我必须执行一个丑陋的操作:

if(object instanceof SubA)
    doSpecific((SubA)object);
else if(object instanceof SubB)
    doSpecific((SubB)object);
...
有没有比必须执行所有
instanceof
检查更好的方法?有没有一种设计模式是我没有想到的?我知道我将失去编译时类型检查的安全性,但我只是好奇还有什么其他的解决方案可能存在

编辑:忘了提这个了
performSomething
doSpecific
是我将调用
ClassA
的不相关类的一部分。我考虑在超类中创建一个抽象方法,以便子类能够正确地实现它。问题在于,
执行某项任务
特定的
取决于
类别a
的大约8个不同成员。因此,如果我想将方法委托给子类,它需要大量的参数,比如
subB.doSpecific(int,int,String,String,Object,int,long,blah,blah)
我不确定它是否比原始的
instanceOf
检查更好。这也将在
ClassA
和我拥有的
Super/Sub
类之间创建紧密耦合,因为我只需要从它们中读取值,这似乎不正确

这意味着:您的每个子类都实现了
doSpecific()
方法。那么您的初始方法如下所示:

public void performSomething(Super object) { 
    //do some generic action each time to object
    object.setSuperProperty();

    //now route to appropriate method to perform specific action
    object.doSpecific(...);
}

编译器会自动选择子类的方法-no
instanceOf
为您检查。

Hmm,这只是在相关文档中弹出的,这很有趣,但似乎紧密耦合,必须公开为一个公共方法来调用:
performSomething
doSpecific
在哪里?关于
docomon(Super s)
、代码重用和
performSomething(SubA a)
、多态性?很抱歉,我应该在我的主要帖子中提到这一点。doSomething依赖的成员变量太多了。我必须通过8-9个参数这样做。