标签:
接下来经过一个例子,对多态问题加深印象:
猫狗案例。
/* 多态练习:猫狗案例 */ class Animal { public void eat(){ System.out.println("吃饭"); } } class Dog extends Animal { public void eat() { System.out.println("狗吃肉"); } public void lookDoor() { System.out.println("狗看门"); } } class Cat extends Animal { public void eat() { System.out.println("猫吃鱼"); } public void playGame() { System.out.println("猫捉迷藏"); } } class DuoTaiTest { public static void main(String[] args) { //定义为狗 Animal a = new Dog(); System.out.println(a);////Dog@1db9742 a.eat();//狗吃肉 System.out.println("--------------"); //还原成狗 Dog d = (Dog)a;//向下转型 System.out.println(a);//Dog@1db9742 System.out.println(d);//Dog@1db9742 d.eat();//狗吃肉 d.lookDoor(); System.out.println("--------------"); //变成猫 a = new Cat(); System.out.println(a);//重新分配地址,重新开辟内存空间Cat@106d69c d.eat();//狗的对象并没有发生变化。 a.eat(); System.out.println("--------------"); //还原成猫 Cat c = (Cat)a; System.out.println(a);//Cat@106d69c System.out.println(c);//Cat@106d69c c.eat(); c.playGame(); System.out.println("--------------"); //演示错误的内容 //Dog dd = new Animal();//动物是狗!错误!错误 //Dog ddd = new Cat();//猫是狗!错误 //ClassCastException //Dog dd = (Dog)a;//a已经属于猫了,不能强制把猫转换成狗 a = new Dog();//可以重新分配内存空间,此时已经不再是以前的地址了,不是Dog@1db9742 System.out.println(a);//再一次分配了新的内存空间Dog@52e922 } } //额外发现多态还有一个好处,定义一次引用类的变量a可以一直使用。
标签:
原文地址:http://blog.csdn.net/qq_32059827/article/details/51330613