java基础-多态

概述

多态是封装,继承之后,面向对象的三大特征
同一种事物表现出来的多种形态。

前提

  • 必须是有子类关系或者实现接口
  • 必须要有方法重写
  • 必须父类指向子类

须知

当父类引用变量指向子类对象时,调用方法会调用子类重写的方法

定义格式

父类类名 变量名 = new 子类类名

例如:Animal a=new Dog();

使用场景

作为形式参数,接受更多的同种类型的类

public static void feedAnimal(Animal a) {
	a.sleep();
	a.eat();
}

作为返回值,返回更多数据类型的对象

public static Animal productAnimal(int type) {
	if(type == 0){
		return new Dog();
	} else if(type == 1){
		return new Cat();
	}
	return null;
}

好处

  • 提高代码的复用性
  • 提高代码的扩展性
  • 提高代码的维护性

缺点

不能调用子类特有的成员(成员变量和成员方法)

转型

向上转型

父类引用指向子类对象的过程

Animal a=new Dog();

向下转型

将父类引用强制转换为子类引用
格式:子类类型 变量名=(之内类型)父类类型

Dog d = (Dog)a;

instanceof

作用

判断某个对象是否属于某种数据类型
一样使用在多态之后用来判断父类引用到底指向那个子类类型的对象

格式

boolean b = 引用变量名  instanceof  类名

注意事项

  1. 毫无关系的两个类型不能进行判断(会出错)
  2. instanceof 关键字之前引用类型和之后的数据类型必须有子父类关系或者实现接口

代码说明

// 判断a实际的数据类型到底是Dog还是Cat
// boolean b = 引用变量名 instanceof 类名;
// boolean b = a instanceof Dog;
if(a instanceof Dog){ //a就是狗对象
	//子类类型变量名=(子类类型)父类引用;
	Dog d = (Dog) a;
	d.lookHome();
} else if(a instanceof cat){
	// 强制转换为Cat
	Cat c= (Cat)a;
	c.catchMouse();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值