java 知识搜集

来源:互联网 发布:仙界网络直播间txt书包 编辑:程序博客网 时间:2024/06/08 16:08
 我们都知道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
原创粉丝点击