Java的多态、instanceof关键字

20190719(多态、instanceof关键字)

标签: java

多态

##1.什么是多态

一个父类的不同子类,对父类中声明的方法的不同调用

##2.为什么使用多态

父类引用调用方法,能够运行子类重写后的方法

##3.实现多态的步骤

3.1 编写父类(可以是抽象类),定义要重写的方法

3.2 子类继承父类,重写父类中的方法

3.3 子类对象赋给父类引用,父类引用调用重写后的方法

**ps:**描述中的父类可能是接口,子类可能是接口的实现类

##4.父类类型强制转换为子类类型

4.1 为什么需要将父类类型转换成子类类型

父类类型无法调用到子类独有成员(属性、方法)

	//子类对象向上造型为父类类型
	Pet p = new Dog();
	//父类类型调用的方法是子类重写后的,但不能调用子类中的独有方法
	//编译按父类编译,运行时才按子类运行

为了达到这个效果,我们可以强制类型转换(向下转型,官方没说是向下转型,所以说强转就行了)

4.2 转换格式

(子类类型) 父类引用

eg: (Dog) p; //p是Pet的引用

4.3 如何使用

转换后赋给子类引用 eg: Dog d = (Dog)p;

就地调用子类成员 eg: ((Dog)p).属性/方法;

	Pet p = new Dog();
	p.feed();
    //转换后赋给子类引用
	Dog d = (Dog)p;
	d.catchFlyDisc();
    //就地调用子类成员
	((Dog)p).catchFlyDisc();

注意:强制类型转换,只能发生在有继承关系的类之间

强制转换的类型不匹配,会报异常 java.lang.ClassCastException (类型转换异常)

	//不会报错,但运行会报异常
    Pet p = new Cat();
	Dog d = (Dog)p;

为了避免这个问题,我们需要使用 instanceof 关键字


instanceof关键字

1. 什么是 instanceof

专门用于判断一个对象,是否属于一个类型的关键字

2. 为什么使用 instanceof

在引用类型强转类型之前,进行判断,防止异常发生

3. 怎么使用 instanceof

引用 instanceof 类型

运行的结果是真或假,所以一般和 if 配合使用

eg:

	Pet p = new Cat();
	p.feed();
	if(p instanceof Dog){
		Dog d = (Dog)p;
		d.catchFlyDisc();
		((Dog)p).catchFlyDisc();
	}else if(p instanceof Cat){
		Cat c = (Cat)p;
		c.washFace();
		((Cat)p).washFace();
	}else
        System.out.println("类型不匹配");

注意: instanceof要有继承关系的才会真(爸爸的爸爸也算继承,类型写Object将都会是真),

平级或者无关都会报false

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值