黑马程序员_java入门_多态

------- android培训java培训、期待与您交流! ----------

 

一.多态

定义:可以理解为实物的多种体现

1.多态的体现

父类的引用指向了自己的子类对象。

父类的引用也可以接受自己的子类对象

2.多态的前提

必须是类与类之间有关系(要么继承,要么实现)。

通常还有一个前提,存在覆盖

3.多态的弊端

提高了扩展性,但只是使用父类的引用访问子类中的成员

 

多态实例代码

abstract class Animal
{
	public abstract void eat();
}
class Cat extends Animal
{
	public void eat()
	{
		sop("吃鱼")
	}
	public void  catchMouse()
	{
		sop("zhuo");
	}
}
class Dog extends Animal
{
	public void eat()
	{
		sop("吃肉")
	}
	public void  kenBone()
	{
		sop("骨头");
	}
}
class DuoTaiDemo
{
	public static void main(String[] args)
	{
		Animal c=new Cat();//父类的引用指向了自己的子类对象,父
//类的引用也可以接受自己的子类对象。
		function(new Cat());
		Cat a=(Cat)c;//把Animal强转回猫
	}
	public static void function(Animal c)
	{
		c.eat();//只是调用父类的功能
	}
}
//
多态的转型
	Animal c=new Cat();//父类的引用指向了自己的子类对象,父
//类的引用也可以接受自己的子类对象。
		function(new Cat());
		Cat a=(Cat)c;//把Animal强转回猫,向下转型

Animal a=new Animal();
Cat b=(Cat)a;这种方式有问题,不能将动物强转为猫。
多态自始至终都是子类在做着变化
///、、、、
instanceof的运用
class DuoTaiDemo
{
	public static void main(String[] args)
	{
		Animal c=new Cat();//父类的引用指向了自己的子类对象,父
//类的引用也可以接受自己的子类对象。
		function(new Cat());
		Cat a=(Cat)c;//把Animal强转回猫
	}
	public static void function(Animal c)
	{
		c.eat();//只是调用父类的功能
		if(c instanceof Cat)//if只要满足了一次  后面不去判断了
		{
			Cat a=(Cat)c;
			a.catchMouse();
		}
		else if(c instanceof Dog)
		{
			Dog c=(Dog)c;
			c.kenBone();
		}
	}
}
// 

 

多态在在编译看左边,运行是看右边

 

 

二。toString方法

1.object有tostring方法,返回的是一个字符串

由类名(getName())+十六进制hashcode表示

 

一般子类都覆盖了此方法 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值