Java保留关键字之instanceof
instanceof 是Java的一个保留关键字,作用是判断其左边对象是否为其右边类的实例,返回boolean类型的数据。可以用来判断继承中的子类的实例是否为父类的实现。

格式: boolean res = object instanceof class

编译报错的几种情况:
(1)明确知道没有继承关系的类
(2)最终类对象 --对于-- 未实现的接口

返回true的情况:
(1)子类对象 --对于-- 父类
(2)接口实现类对象 --对于-- 接口
(3)当前类对象 --对于-- 当前类

返回false的情况:
(1)父类对象 --对于-- 子类
(2)普通类对象 --对于-- 未实现的接口
(3)null  -- 对于-- 任意类

以上为自己测试总结的结果,能力有限,可能不全。欢迎留言补充。
还是那句话,看下简单的示例代码:
package org.devsong;

import java.util.Map;

interface InterOne{}
class A{}
class B extends A{}
class C implements InterOne{}
final class D{}
final class E implements InterOne{}

public class InstanceOfDemo {
    public static void main(String[] args) {
        A a = new A();
        A ab = new B();
        B b = new B();
        InterOne inter = new C();
        C c = new C();
        D d = new D();
        E e = new E();
        
        /**
         * 子    类    对    象       instanceof  父    类   ---> true
         * 接口实现类对象       instanceof  接    口   ---> true
         * 当  前  类  对  象       instanceof  当前类   ---> true
         * 即以下语句执行结果为 true
         */
        System.out.println(a instanceof A);       
        System.out.println(ab instanceof B);
        System.out.println(ab instanceof A);
        System.out.println(b instanceof A);
        System.out.println(inter instanceof InterOne);
        System.out.println(c instanceof InterOne);
        
        /**
         * 父类对象      instanceof  子   类   ---> false
         *  null  instanceof  任意类  ---> false
         */
        System.out.println(a instanceof B);    //false
        System.out.println(null instanceof A); //false
        
        /**
         * 没有继承关系的两个类:类1对象   instanceof 类2   ---> 编译报错: Incompatible conditional operand types C and A
         */
        System.out.println(c instanceof A);  //报错
        
        /**
         * 特别注意一下接口的情况
         * 没有 “实现关系” 的普通类可以用 instanceof(尽管好像没什么意义) ---> false
         * 没有 “实现关系” 的最终类不可以用 instanceof, 否则编译报错 :Incompatible conditional operand types D and Map
         */
        System.out.println(a instanceof InterOne);    //false
        System.out.println(a instanceof Map);         //false
        System.out.println(d instanceof InterOne);    //编译报错  注意观察class A 与 class D, A是一个普通类, D用final修饰, 是一个最终类
        System.out.println(d instanceof Map);         //编译报错
        System.out.println(e instanceof InterOne);    //类和接口有实现关系的话  ---> true
        
    }
}

以上只是个人总结结果,个人能力有限,理解尚浅,或许存在不全或有误的地方,若您发现问题,欢迎留言。
It's
欢迎访问本站,欢迎留言、分享、点赞。愿您阅读愉快!
*转载请注明出处,严禁非法转载。
https://www.devsong.org
QQ留言 邮箱留言
头像
引用:
取消回复
提交
涂鸦
涂鸦
热门