標籤

二元樹 (1) 字串常數池 (1) 投資 (3) 每月損益 (37) 例外處理 (1) 泛型 (2) 股票 (15) 指標 (5) 英文 (8) 基本資料型別 (1) 期貨 (1) 程式交易 (10) 量化投資 (5) 亂亂寫 (3) 概念 (3) 資料結構 (3) 演算法 (3) 數學 (3) 轉型 (1) AMA (1) ArrayList (1) assert (1) BeautifulSoup (1) C/C++ (8) casting (1) ClassCastException (1) classpath (1) Collection (4) Comparable (1) comparTo() (1) constructor (1) database (3) Debian (1) Dropbox (2) EA (2) enum (1) equals() (2) exception (3) extends (1) ffmpeg (1) final (1) Git (1) HashMap (1) HashSet (1) hasNext() (1) HTS (3) instanceof (1) IS-A (1) Iterator (1) JAVA (43) length (1) Linux (31) List (1) Mac (6) Map (1) ML (2) MT4 (6) MySQL (2) next() (1) NullPointerException (1) Number (1) Numpy (2) OpenCart (1) OpenCV (3) OSX (1) overloading (1) overriding (3) pandas (2) PHP (8) PriorityQueue (1) Python (11) Queue (1) random() (1) reverse() (1) Samba (1) SCJP (21) sqrt() (1) synchronized (1) talib (1) ufw (1) uTorrent (1) var-args (2) VHF (1) vim (2) Yhoo知識+ (4)

2012年10月29日 星期一

instanceof

if(物件o instanceof 類別A),若物件能通過IS-A類別的測試,回傳true。
所以不管物件o的型別是什麼,看物件就對了。


interface Foo{ }
class Alpha implements Foo{ }
class Beta extends Alpha{ }
public class Delta extends Beta{
        public static void main(String[] args){
                Beta x = new Beta();
                Foo f = (Delta)x;    //這行註解起來可順利執行
                Foo ff = (Alpha)x;
                Beta b = (Beta)(Alpha)x;    //這行能過
        }
}


上面程式碼可順利編譯(因為…我也不知道),但執行只有第7行會出現下面的例外

Exception in thread "main" java.lang.ClassCastException: Beta
at Delta.main(Delta.java:7)

 Beta b = (Beta)(Alpha)x; 
//這行能過是因為x指向的物件是Beta,用instanceof來測試,x is-a Alpha,x is-a Beta,都可以通過IS-A的測試。

Foo f = (Delta)x; 
不能通過的原因是,x is-a Delta,不能通過IS-A測試。

沒有留言:

張貼留言