Прежде всего, BalusC прав.
Во-вторых:
Если вы принимаете решения на основе типа класса, вы не позволяете полиморфизму выполнять свою работу.
Ваша классовая структура может быть неправильной (как Car и Person не должны быть в одной иерархии)
Возможно, вы могли бы создать интерфейс и код для него.
interface Fooable {
Fooable createInstance();
void doFoo();
void doBar();
}
class Car implements Fooable {
public Fooable createInstance() {
return new Car();
}
public void doFoo(){
out.println("Brroooom, brooooom");
}
public void doBar() {
out.println("Schreeeeeeeekkkkkt");
}
}
class Person implements Fooable {
public Fooable createInstance(){
return new Person();
}
public void foo() {
out.println("ehem, good morning sir");
}
public void bar() {
out.println("Among the nations as among the individuals, the respect for the other rights means peace..");// sort of
}
}
Позже ...
public class Xpto{
protected Fooable x;
public void foo(){
Fooable y = x.createInstance();
// no more operations that depend on y's type.
// let polymorphism take charge.
y.foo();
x.bar();
}
}