日期:2014-05-19  浏览次数:20801 次

一到java笔试题。
public class TestA {

interface An {
void sayHi();

String getName();
}

class Dog implements An {
public String getName() {
return "Bob";
}

public void sayHi() {
System.out.println("I am " + getName() + "." + back());
}

private String back() {
return "wang-wang";
}
}

class BullDog extends Dog {
public String getName() {
return "Mike";
}

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

public void checkout() {
An a = new Dog();
a.sayHi();

An b = new BullDog();
b.sayHi();

Dog dog = (Dog) b;
check(dog);

BullDog bulldog = (BullDog) b;
check(bulldog);
}

public void check(Dog dog) {
System.out.println("check dog " + dog.getName());
}

public void check(BullDog bulldog) {
System.out.println("check dog " + bulldog.getName());
}

/**
* @param args
*/
public static void main(String[] args) {
TestA tA = new TestA();
tA.checkout();
}

}

第二个结果的原因是什么???

------解决方案--------------------
class Dog implements An {
public String getName() {
return "Bob";
}

public void sayHi() {
System.out.println("I am " + getName() + "." + back());
}

private String back() {
return "wang-wang";
}
}

这里的Dog类是BullDog的父类,父类中你的back()方法是用private修饰的,所以在子类中无法重写,换句话说就是你用BullDog实例调用back方法时,back方法调用的是父类中的此方法,所以不会打印出“woo-woo”你要是在父类中修改为 protected的话就可以了。