对象的上转型对象

如果一个Dog类是Animal类的子类,xiaohei 是Dog的一个对象,如果 animal1是Animal类的对象,令 animal1 = xiaohei。则称animal1 是 xiaohei 的上转型对象,即:小黑是狗,小黑也是animal。但animal1只具有Dog从Animal继承或改写的成员和方法,也就是失去了子类自己的属性。

样例如下:

Animal类:

package zjl.java;
public class Animal {
    private int leg = 4;
    private int arm = 2;
    public void speak(){
        System.out.println("...");
        System.out.println("i have 4 legs and 2 arms");
    }
}

Dog:

package zjl.java;
public class Dog extends Animal {
    String name;
    Dog(String s){
        this.name = s;
    }
    public void tellName()
    {
        System.out.println("My name is "+this.name + "。");
    }
    @Override
    public void speak(){
        System.out.println("I am a dog,my name is "+name);
        System.out.println("汪汪汪");
    }
}

主类:

package zjl.java;
public class TestClass {
    public static void main(String[] args) {
        Dog xiaoHei = new Dog("小黑");
        Animal animal1 = new Animal();
        animal1 = xiaoHei;
        animal1.speak();
    }
}

结果:

I am a dog,my name is 小黑
汪汪汪

注:书上说如果子类改写了父类的静态方法,子类对象的上转型对象不能调用子类的静态方法,只能调用父类的静态方法。但是我试了下静态方法好像不能重写啊。

原文地址:https://www.cnblogs.com/zhangjialu2015/p/5358371.html