java_多态(1)

/*
多态就是一种事物具有多种形态

比如:
汽车:跑车,货车,大巴。
动物:狗,猫,羊。

多态的体现
 父类的引用指向了子类。
 父类的引用也可以接收子类自己的对象

多态的前提
 父类与子类之间必须具有继承或实现的中一个的一个关系。

多态的好处
 提高代码的扩展性。

*/

//以下用动物做一个多态的实例

abstract class Animal
{
	 abstract void eat();
}

class Dog extends Animal
{
	public void eat()
	{
		System.out.println("啃骨头");
	}
	public void protectHome()
	{
		System.out.println("汪,汪");
	}
}

class Cat extends Animal
{

	public void eat()
	{
		System.out.println("吃鱼");
	}
	public void catchMouse()
	{
		System.out.println("抓老鼠");
	}
}

class duotaiDemo1
{
		public static void main(String[] args)
		{
			/*	Dog d=new Dog();
				d.eat();
				d.protectHome();
				Cat c=new Cat();
				c.eat();
				c.catchMouse();
			以上是未应用多态时的做法
			*/

			function(new Dog());   //应用多态
			function(new Cat());


			Animal d=new Dog();  //此种做法叫子类类型的提升
			d.eat();
			Dog h=(Dog)d;      //此做法叫做子类类型的向下转换,以调用Dog特有的方法
			h.protectHome();
			/*
				Animal a=new Animal();
				Dog d=(Dog)a;
				此种做法是错误的,父类对象不能向下转换,只能子类对象向子类自己或父类转换。
				多态改变的过程,始终都是子类对象在改变。	
			*/
		
		}
		public static void function(Animal a)   //应在main方法外定义。原因是main方法是静态,
			{
				a.eat();  
			} 
		
			/*如果要调用Dog中特有方法怎么办?
				应用instanceof关键字判断对象类型, 用法 (对象 instanceof 类型)  如果正确则返回true 否则返回false;
				public static void function(Animal a)
					{
						a.eat();
						if(a instanceof Dog)
						{
							Dog d=(Dog)a;
							d.protectHome();
						}
						else if(a instanceof Cat)
						{
							Cat c=(Cat)c;
							c.catchMouse();
						}
					
					}	
			*/


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值