instanceof详解
1.instanceof是Java保留关键字
2.instanceof的左边是对象,右边是类,当对象是右边类或其子类创建的对象时,返回true,否则返回false
3.说明,类的实例包含类本身的实例,以及所有直接或间接子类的实例
例1:Student2类和Teacher类继承People2类,而Student3继承Student2类,new一个Student2类的实例变量,把它赋给Object类型的对象,测试下面用例
测试分析:
1.o instanceof Student2:true,o是Student2本身的实例化对象
2.o instanceof People2:true,o是People2的子类Student2的实例化对象
3.o instanceof Object:true,o是Object的子类(People2)的子类(Student2)的实例化对象
4.o instanceof Teacher:false,o不是Teacher类或其子类的实例化对象
5.o instanceof Student3:false,o不是Student3类或其子类的实例化对象
注意的是,这里在执行instance语句有两步:
1.编译,如果对象o本身类型(即object)与instanceof右边的类有继承关系,编译通过(如o instanceof String通过编译),否则编译报错
2.执行,我们这里o是Student2的实例化对象,如果o是instanceof右边类本身或其子类的实例化对象,返回true
前会先编译,若左右两边没有继承关系,则编译报错,如
这里String类和Studen2类没有任何关系,因此会报错,编译的适合就不通过了
强制类型转换
与数据类型时的类型转换相似
自动转换类型:低-->高,即子类-->父类,向上转型,但可能丢失子类自身的方法
强制转换类型:高-->低,即父类-->子类,向下转型
例2:Student2类继承People2类分别通过自动转换和强制性转换调用子类的方法