如果一个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 小黑
汪汪汪
注:书上说如果子类改写了父类的静态方法,子类对象的上转型对象不能调用子类的静态方法,只能调用父类的静态方法。但是我试了下静态方法好像不能重写啊。