instanceof 操作符的使用
// Person p2 声明了一个变量 右边给他提供一个对象时 , 对象体现了多种形态
System.out.println("===========================================================");
//不能调用子类所特有的方法、属性 编译时,p2是Person类型
// p2.earnMoney();
// p2.isSmoking;
//有了对象的多态性以后,内存中实际上是加载了子类特有的属性和方法,但是由于变量声明为父类类型,
//导致编译时,只能调用父类中声明的属性和方法,子类特有的属性和方法不能调用
//如何才能调用子类的特有的属性和方法
Man m2 = (Man)p2;
m2.earnMoney();
//使用强制转换时,可能出现ClassCastException的异常
// Woman w1 = (Woman)p2;
// w1.goShopping();
/*
* instanceof 关键字的使用
*
* aaa instanceof AAA:判断对象aaa是否是类AAA的实例,如果是,返回true 否则返回false
*
* 使用情景:为了避免在向下转型时出现ClassCastException的异常,我们在向下转型之前
* 先进行instanceof的判断 一旦返回true 就进行向下转型 返回false则不能
*
* 如果aaa instanceof AAA返回true,aaa instanceof BBB也返回true 其中类BBB是类AAA的父类
package com.hlq.java;
/*
* 面向对象特征之三、多态性
* 1.理解多态性:一个事物的多种形态
* 2.何为多态性:父类的引用指向子类的对象
* 3.多态的使用:虚拟