当一个对象作为类型超类传入时,有没有办法检索子类的类型?

时间:2011-08-06 14:40:33

标签: java oop

如果我有方法签名

public void myMethod(SuperClass s){
}

SuperClass有三个子类,在myMethod中是否有任何方法我可以获取传入的子类的类名?

不确定它是否重要,但SuperClass是抽象的。

1 个答案:

答案 0 :(得分:9)

  

在myMethod中是否有任何方法可以获取传入的子类的类名?

是的,使用getClass method

public void myMethod(SuperClass s){
    System.out.println(s.getClass());
}

备注1:

然而,这听起来像是Bad Design™。

无论你想在myMethod中做什么,都要考虑在SuperClass中设置一个方法(提供一个有意义的默认实现,或者使其抽象以强制子类来实现该方法)并调用此方法您的方法中的s

public void myMethod(SuperClass s){
    s.abstractMethod();
}

备注2:

如果myMethod逻辑似乎与SuperClass的目的无关,并且您不想将myMethod代码放在此类中,请考虑实现{{3}而不是。