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";
    }
}上边的Dog d = (Dog) mini;其中的d到底是父类的对象还是子类的?

解决方案 »

  1.   

    我猜是子类:)
    您可以把d.getClass()打出来看看。
      

  2.   

    父类类型的引用 将mini对象向上转型 d引用子类对象 d的地址是指向的子类MiniDog对象内容的地址 我觉得说d是谁的对象不太准确 应该说d引用的是谁的对象
      

  3.   

    父类类型的引用将mini对象向上转型, d引用子类对象。但是是Dog父类对象,d的地址是指向的子类MiniDog对象内容的地址 我觉得说d是谁的对象不太准确 应该说d引用的是谁的对象
      

  4.   

    d是父类的引用,不是对象,对象是NEW出来的
      

  5.   

    这个是向上转型不是向下Dog d = (Dog)mini;
    (Dog)多余的
    d是一个父类引用,引用了子类的对象
    所以d.call()调用的是子类的方法,d不是谁的对象,是引用了哪个对象