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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章