Java“多态”特性理解

多态存在的三个必要条件:1.继承 2.重写 3.父类引用指向子类对象.

为甚么要多态:

首先要知道多态的定义:多态是同一个行为具有多个不同表现形式或形态的能力。也就是同一个接口,使用不同的实例而执行不同操作。
比如下面的代码:

public class duotai {
	public static void main(String[] args) {
		cat c=new cat();
		dog d=new dog();
		show_c(c);
		show_d(d);
	}
	/*定义猫类的show函数*/
	public static void show_c(cat c) {
		c.eat();
		c.work();
	}
	/*定义狗类的show函数*/
	public static void show_d(dog d) {
		d.eat();
		d.work();
	}
}
/*定义猫类*/
class cat {
	public void eat() {
		System.out.println("猫吃鱼");
	}
	public void work() {
		System.out.println("猫抓老鼠");
	}
}
/*定义狗类*/
class dog{
	public void eat() {
	System.out.println("狗啃骨头");
	}
	public void work() {
		System.out.println("狗看家");
	}
}

输出:

猫吃鱼
猫抓老鼠
狗啃骨头
狗看家

上面这段代码定义了两个类猫和狗,并且分别实例化对象c和d,并且定义猫类和狗类的show函数。那么问题来了,这两个show可不可以合成一个,如果可以那么代码就更加简化了。

那么这两个show函数合并的关键在于,定义函数时参数列表的不同,一个参数为cat类,一个为dog类,因此要想合并,必须统一参数列表。

因此多态就来了。

多态的解决:

public class duotai {
	public static void main(String[] args) {
		Animal c= new cat();/*向上转型*/
		Animal d= new dog();
		show(c);
		show(d);
	   }
	/*定义show函数*/
	public static void show(Animal a) {
		a.eat();
		if(a instanceof cat) {
			cat c=(cat) a;/*向下转型*/
			c.work();
		}else {
			dog d=(dog) a;
			d.work();
		}
		
	}
}
/*定义父类Animal*/
abstract class Animal{
	abstract void eat();
}
/*定义猫类*/
class cat extends Animal{
	public void eat() {
		System.out.println("猫吃鱼");
	}
	public void work() {
		System.out.println("猫抓老鼠");
	}
}
/*定义狗类*/
class dog extends Animal{
	public void eat() {
	System.out.println("狗啃骨头");
	}
	public void work() {
		System.out.println("狗看家");
	}
}

输出:

猫吃鱼
猫抓老鼠
狗啃骨头
狗看家

上面就是使用多态来重写show函数,代码中多态满足三要素:
1.继承 :猫类和狗类继承自动物抽象类:class cat extends Animal,class dog extends Animal
2.重写 :对eat()抽象函数的重写
3.父类引用指向子类对象:Animal c= new cat(); Animal d= new dog();也称为 向上转型

注意:在向上转型下,实例不能调用自身定义的方法,必须通过向下转型才可以调用自身方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值