[Java] 6.5. instanceof

instanceof,檢查物件所擁有的型別。

 

image/svg+xml6.5. 型別測試運算⼦ - instanceof class Main { public static void main( String [] args){ Employee e1 = new Programmer (); Employee e2 = new Tester (); Employee e3 = new Artist (); Boss b = new Boss (); b . codeCommand ( e1 ); b . codeCommand ( e2 ); b . codeCommand ( e3 ); } } class Boss { void codeCommand ( Employee e ){ Programmer p1 = ( Programmer ) e ; p1 . code (); } } class Boss { void workCommand ( Employee e ){ if ( e instanceof Programmer ){ ( (Programmer)e ). code (); } else if ( e instanceof Tester ){ ( (Tester)e ). test (); } else if ( e instanceof Artist ){ ( (Artist)e ). draw (); } } } class Main { public static void main( String [] args){ Employee e1 = new Programmer (); Employee e2 = new Tester (); Employee e3 = new Artist (); Boss b = new Boss (); b . workCommand ( e1 ); b . workCommand ( e2 ); b . workCommand ( e3 ); } } 執⾏結果 Jack 正在寫程式 Coding ByJack Jack 終於寫完程式了 Eric 正在測試系統 Teting By Eric Eric 終於寫完測試了 Marry 正在畫圖畫 Drawing Marry Marry 終於寫完畫完了 J6_5_1 – Main.java 1. 將不同⾓⾊的物件皆透過轉型,以變成員⼯型別的物件( Employee )。 J6_5_2 – Boss.java J6_5_1 – Boss.java 2. 建立⼀個老闆物件,並透過寫程式命令⽅法 codeCommand() )命令這些員⼯都去寫程式。 3. 因寫程式命令⽅法接收的參數是⼀個員⼯型別的參數,因此接收的都是員 ⼯型別的物件,為了要讓員⼯進⾏寫程式的⼯作,必須先向下轉型(即強迫轉 型)將員⼯物件轉型為程式設計型別的物件( Programmer ),才能使⽤寫程 式⽅法( code() )。但問題是這些員⼯物件並不是每個皆是擁有程式設計師 的型別?那若進⾏向下轉型不就會發⽣轉型異常了?有沒有辦法在先確認員⼯ 就是⼀個程式設計師型別的物件後,才進⾏強迫轉型的動作呢? J6_5_2 – Main.java 1. 這是老闆類別( Boss )。 3. isntanceof 右邊放的是⼀個物件,左邊放的是⼀個型別。⽬前的例 ⼦中,左邊為員⼯型別的物件,右邊則是程式設計師型別 Programmer ),⽽ instanceof 就會測試這個員⼯物件是否為程式設 計師型別的物件(即測試此員⼯物件是否擁有程式設計師的型別)。 2. 老闆命令員⼯去⼯作的⽅法( workCommad() ), 其參數是員⼯型別的參數,只能接收員⼯型別的物件。 4. 檢測是否為程式設計師型別的物件。若 true 向下轉型(即強迫轉型)為程式設計師的型別,並呼 叫寫程式⽅法( code() )進⾏寫程式的作業。 5. 檢測是否為測試⼈員型別( Tester )的物件。若 true 則向下轉(即強迫轉型)型為測試⼈員的型別, 並呼叫測試⽅法( test() )進⾏測試的作業。 6. 檢測是否為美⼯⼈員型別( Artist )的物件。若 true 則向下轉型(即強迫轉型)為美⼯⼈員的型別, 並呼叫繪圖⽅法( draw() )進⾏繪圖的作業。 7. 將不同⾓⾊的物件皆透過轉型,以變成員⼯型別的物件。 8. 建立老闆物件( Boss )。 9. 老闆以統⼀的⼯作命令⽅法( workCommand() 命令所有員⼯去⼯作。此時老闆會在確認每位員⼯真實 的⾝份後,命令員⼯作該作的事。 如何讓您的老闆確認每個員⼯的真實⾝份? 是程式設計師、測試⼈員、⼜或是美⼯⼈員? instanceof ,檢測員⼯的⾝份 1 2 3 1 2 3

留言