日期:2014-05-20  浏览次数:20773 次

一道关于继承的面试题,有意思
Java code

public class Test {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.call();
        MiniDog mini = new MiniDog();
        mini.call();
        
        Dog d = (Dog) mini;
        d.call();
        
    }
}

public class Dog {
    private String getName(){
        return "Dog";
    }
    
    public String bark(){
        return "wang-wang";
    }
    
    public void call(){
        System.out.println("I'm " + getName() + " " + bark());
    }
}

public class MiniDog extends Dog {
    private String getName(){
        return "Mini";
    }
    
    public String bark(){
        return "WOO";
    }
}





如上,输出结果是什么?正确结果是:
I'm Dog wang-wang
I'm Dog WOO
I'm Dog WOO
第一条没什么争议,第二条谁能解释一下为什么,最好是能说明白在虚拟机内部的结构。thank you!

------解决方案--------------------
请看:重载,集成和多态;算符优先级;没事儿找事儿
------解决方案--------------------
Java code
public class MiniDog extends Dog {
    @Override
    private String getName(){
        return "Mini";
    }
    @Override
    public String bark(){
        return "WOO";
    }
}

------解决方案--------------------
私有方法不被继承
------解决方案--------------------
探讨
Java codepublicclass MiniDogextends Dog {
@Overrideprivate String getName(){return"Mini";
}
@Overridepublic String bark(){return"WOO";
}
}
你试试  很可能MiniDog中的方法没有被重写

------解决方案--------------------
给我30分