java中的instanceof,javainstanceof

來源:互聯網
上載者:User

java中的instanceof,javainstanceof

instanceof是Java、php的一個二元操作符(運算子),和==,>,<是同一類東西。由於它是由字母組成的,所以也是Java的保留關鍵字。它的作用是判斷其左邊對象是否為其右邊類的執行個體,返回boolean類型的資料。可以用來判斷繼承中的子類的執行個體是否為父類的實現。相當於c#中的is操作符。java中的instanceof運算子是用來在運行時指出對象是否是特定類的一個執行個體。instanceof通過返回一個布爾值來指出,這個對象是否是這個特定類或者是它的子類的一個執行個體。

 

instanceof的使用

一、

比如我們寫了一個處理賬單的系統,其中有這樣三個類:public class Bill {//省略細節}public class PhoneBill extends Bill {//省略細節}public class GasBill extends Bill {//省略細節}在處理常式裡有一個方法,接受一個Bill類型的對象,計算金額。假設兩種賬單計算方法不同,而傳入的Bill對象可能是兩種中的任何一種,所以要用instanceof來判斷:public double calculate(Bill bill) {if (bill instanceof PhoneBill) {//計算電話賬單}if (bill instanceof GasBill) {//計算燃氣賬單}...}這樣就可以用一個方法處理兩種子類。然而,這種做法通常被認為是沒有好好利用物件導向中的多態性。其實上面的功能要求用方法重載完全可以實現,這是物件導向編程應有的做法,避免回到結構化編程模式。只要提供兩個名字和傳回值都相同,接受參數類型不同的方法就可以了:public double calculate(PhoneBill bill) {//計算電話賬單}public double calculate(GasBill bill) {//計算燃氣賬單}所以,使用instanceof在絕大多數情況下並不是推薦的做法,應當好好利用多態。  二、物件類型的強制轉換例如:繼承關係 class Manager extends Employee----------------------------------------------------------public void doSomething(Employee e) {if ( e instanceof Manager){Manager m = (Manager) e ;}}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.