【Java】java 继承关系判断

文章讨论了Java中关于类继承关系判断的几个关键方法:Class.isInstance(),Class.isAssignableFrom(),Class.cast()以及instanceof关键字的使用。isInstance()检查对象是否属于特定类或其子类,isAssignableFrom()检查类是否能赋值给另一个类,cast()用于类型转换,而instanceof则用来判断对象是否为某个类的实例或其子类实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

继承关系判断

Class.java # public native boolean isInstance(Object obj);

        Class[] list={Child.class, Parent.class};
        System.out.println(list[0].isInstance(new Child()));//true
        System.out.println(list[0].isInstance(new Parent()));//false
        System.out.println(list[1].isInstance(new Child()));//true
        System.out.println(list[1].isInstance(new Parent()));//true
        
        System.out.println(list[0].isInstance(Child.class));//false
        System.out.println(list[0].isInstance(Parent.class));//false
        System.out.println(list[1].isInstance(Child.class));//false
        System.out.println(list[1].isInstance(Parent.class));//false

说明:

  • 参数obj的参数类型若为.class,返回 false
  • 当参数强转为调用者对象不会报异常时,返回true(即调用者为参数的类或父类)

Class.java#public native boolean isAssignableFrom(Class<?> cls);

        Class[] list={Child.class, Parent.class};
        System.out.println(list[0].isAssignableFrom(Child.class));//true
        System.out.println(list[0].isAssignableFrom(Parent.class));//false
        System.out.println(list[1].isAssignableFrom(Child.class));//true
        System.out.println(list[1].isAssignableFrom(Parent.class));//true

说明:

  • 调用者和参数都是.class类型;
  • 调用者为参数的类或父类

Class.java#public T cast(Object obj);

        Class[] list={Child.class, Parent.class};
        System.out.println(list[0].cast(new Child()));//不可调用Child对象中的方法,因为是数组而不是泛型,com.Child@7cdbc5d3
//        System.out.println(list[0].cast(new Parent()));//报错
        System.out.println(list[1].cast(new Child()));//不可调用Child对象中的方法,因为是数组而不是泛型,com.Child@3aa9e816
        System.out.println(list[1].cast(new Parent()));//不可调用Child对象中的方法,因为是数组而不是型,com.Parent@17d99928
        System.out.println(Child.class.cast(new Child()));//可调用Child对象中的方法
        System.out.println(((Child) list[0].cast(new Child())));//可调用Child对象中的方法

说明:

  • 父类不可以强转为子类,但是double可以强转为int;
  • 参数obj的参数类型若为.class,报错;
  • 调用者为参数的类或子类,否则报错;
  • 使参数转化为调用的对象;

instance of 关键字
用法:
A isntance of B:判断左边对象是否是右边类的实例;

        Child child = new Child();
        Parent parent = new Parent();
        System.out.println(child instanceof Child);//true
        System.out.println(parent instanceof Child);//false
        System.out.println(child instanceof Parent);//true
        System.out.println(parent instanceof Parent);//true
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

惠菁

跪求一键三联

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值