请问这段程序的输出是什么 为什么

public class Test {

public static void main(String[] args) {

Animal a = new Dog();

a.syaHi();

Animal b = new Bulldog();

b.syaHi();

Dog dog = (Dog)b;

dog.syaHi();

check(dog);

Bulldog bulldog = (Bulldog)b;

check(bulldog);

}

public static void check(Dog dog)

{

System.out.println("check dog"+dog.getName()+".");

}

public static void check(Bulldog bulldog)

{

System.out.println("check bulldog"+bulldog.getName()+".");

}

}

interface Animal

{

void syaHi();

String getName();

}

class Dog implements Animal

{

public String getName()

{

return "Bob";

}

private String bark()

{

return "wang-wang";

}

public void syaHi()

{

System.out.println("I am "+getName()+"."+bark());

}

}

class Bulldog extends Dog

{

@Override

public String getName(){return "Mike";}

private String bark(){return "WOO-WOO";}

}

你就不能自己运行一下嘛?运行了,什么顺序都出来,且不会有错。

I am Bob.wang-wang
I am Mike.wang-wang
I am Mike.wang-wang
check dogMike.
check bulldogMike.

 I am Bob.wang-wang
I am Mike.wang-wang
I am Mike.wang-wang
check dogMike.
check bulldogMike.

 I am Bob.wang-wang
I am Mike.wang-wang
I am Mike.wang-wang
check dogMike.
check bulldogMike.

我们脑子也不是计算机,自己运行一下不就知道了

I am Bob.wang-wang
I am Mike.wang-wang
I am Mike.wang-wang
check dogMike.
check bulldogMike.