码迷,mamicode.com
首页 > 编程语言 > 详细

《java入门第一季》之面向对象(多态练习)

时间:2016-05-07 09:36:53      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:

接下来经过一个例子,对多态问题加深印象:

猫狗案例。

/*
	多态练习:猫狗案例
*/
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可以一直使用。

相信多态是什么,以及多态的使用方式一目了然。有问题在下面一起讨论。

《java入门第一季》之面向对象(多态练习)

标签:

原文地址:http://blog.csdn.net/qq_32059827/article/details/51330613

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!