java extends 如何判断子类,调用子类

public abstract class Animal {
}
public class Dog extends Animal{
public int leg;
public Dog(){
this.leg = 4;
}
}
public class Fish extends Animal{
public int fin;
public Fish(){
this.fin=2;
}
}
public class Main {

public static void main(String[] args) {
    Animal a;
    if (Math.random()>0.5)
        a = new Fish();
    else
        a= new Dog();
    System.out.println("Is a Dog?");
    if (/*这里如何判断*/){
        System.out.println("yes");
        System.out.println("It has " + /*a.leg(这个错的,要如何调用)*/ + " legs");
    }
    else{
        System.out.println("No");
        System.out.println("It has " + /*a.fin(这个错的,要如何调用)*/ + " fins");
    }

}

}

本人新手,用反射是不是可以。

不是很清楚,我也是新手,反射也不是太明白

a.getClass() == Dog.getClass()

instanceof
http://blog.csdn.net/mydwr/article/details/9332293

a instanceof Dog
((Dog)a).leg 这样可以
还有就是反射了

public class Main {
public static int leg(Animal a){
return 0;
}
public static int leg(Fish f){
return f.fin;
}
public static int leg(Dog d){
return d.leg;
}

public static void main(String[] args) {
    Animal a;
    if (Math.random()>0.5)
        a = new Fish();
    else
        a= new Dog();
    System.out.println("Is a Dog?");
    if (a instanceof Dog){
        System.out.println("yes");
        System.out.println("It has " + ((Dog)a).leg + " legs");
    }
    else{
        System.out.println("No");
        System.out.println("It has " + ((Fish)a).fin + " fins");
    }

}

}