一到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的话就可以了。