java 知识搜集

 我们都知道instanceof测试一个实例是不是一个类的实例。那么如果你认为一个Dog 的dog instanceof Object 会返回假,那你就大错特错了。对于所有的父类(super) 类,instanceof 测试都会返回真。

我们来看这个例子:

class Base{}class Ext1 extends Base{}class Ext2 extends Ext1{}public class TestCast { public static void main(String[] args) { Object c1 = new Ext1(); Object c2 = new Ext2(); if(c1 instanceof Base){ System.out.println("c1: " + c1 + ", is a Base class"); } if(c2 instanceof Base){ System.out.println("c2: " + c2 + ", is a Base class"); } if(c2 instanceof Ext1){ System.out.println("c2: " + c2 + ", is a Ext1 class"); } if(c2 instanceof Ext2){ System.out.println("c2: " + c2 + ", is a Ext2 class"); }}

结果是

c1: Ext1@12b6651, is a Base classc2: Ext2@4a5ab2, is a Base classc2: Ext2@4a5ab2, is a Ext1 classc2: Ext2@4a5ab2, is a Ext2 class


所有测试都为真。

那么 如果我想知道一个实例是否是一个类,而不是父类(super classes)的实例怎么办呢:那就是用0o.getClass().equals(Dog.class)测试:
我们再看例子:


class Base{}class Ext1 extends Base{}class Ext2 extends Ext1{}public class TestCast { public static void main(String[] args) { Object c1 = new Ext1(); Object c2 = new Ext2(); if(c2.getClass().equals(Base.class)){ System.out.println("c2: " + c2 + ", is of Ext1 class exactly"); } if(c2.getClass().equals(Ext1.class)){ System.out.println("c2: " + c2 + ", is of Ext1 class exactly"); } if(c2.getClass().equals(Ext2.class)){ System.out.println("c2: " + c2 + ", is of Ext2 class exactly"); } }}


结果是:

c2: Ext2@4a5ab2, is of Ext2 class exactly
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值