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