java面向对象之多态(向上转型和向下转型)

什么是多态

简而言之,同一行为的不同表现形式。比如叫的动作。猫是“喵喵喵”,狗是“汪汪汪”。

多态存在的三个条件

1、继承
2、方法的重写
3、父类的引用指向子类的对象。(向上转型)
举个栗子:

//多态的学习
/*存在,有三个必要条件:继承,方法重写,父类引用指向对象
 * 父类引用指向子类对象后,用该父类引用调用子类重写的方法,此时出现多态
 * 
 * */
public class TestPolym {
	public static void main(String[] args) {
		animal a=new dag();//自动向上转型;子类向父类转型
		a.eat();//这句话会报错
        dag aDag=(dag)a;//向下转型,父类向子类转型
        dag c=(cat)a;//报错,向下转型必须转型为本类对象,狗不能变成猫。
		animalcry(a);		
//		animalcry(new dag());
		animalcry(aDag);
	}
	public static void animalcry(animal a) {
		a.shout();

	}
}

class animal{
	public void shout(){
		System.out.println("动物在叫");
	}
}

class cat extends animal{
	public void shout(){
		System.out.println("猫:喵喵喵");
	}
}
class dag extends animal{
	public void shout() {
		System.out.println("狗:汪汪汪");
		
	}
	public void eat() {
		System.out.println("狗:吃骨头");
	}
}
狗:汪汪汪
狗:汪汪汪

我们可以看到对于同一个shout()行为,猫猫和狗狗的表现形式完全不一样,都各自继承重写了shout()方法。

多态的方式

一般分为两种:重写式多态(运行时多态)和重载式多态(编译式多态)。

向上转型和向下转型

向上转型:

将子类的引用对象转化为父类对象。父类对象可以是接口。如animal a=new dag();//自动向上转型;子类向父类转型

向上转型过程中,需要注意的问题

  • 向上转型,子类单独定义的方法会丢失。比如上面代码中的a.eat()会报错。
  • 子类引用不能指向父类对象。

向下转型:

把父类对象转化为子类对象。

向下转型过程中,需要注意的问题

  • 向下转型的前提是父类对象指向的是子类对象(也就是说,在向下转型之前,它得先向上转型)
  • 向下转型只能转型为本类对象(猫是不能变成狗的


参考文献:https://blog.csdn.net/qq_31655965/article/details/54746235

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值