2012年3月3日 星期六

instanceof


instanceof

Java提供了instanceof作為判別類別間繼承關係之用,如果要判定的物件為該類別或該類別的子類別則傳回true,否則傳回false。需特別注意的是,物件與類別間要有繼承關係,否則會有compile error,如錯誤狀況12

Java裡有個特別規定,就是任何陣列都繼承Object,所以類別陣列將繼承ObjectObject[],一般型別陣列則會繼承Object,但是一般型別不是物件,所以一般型別陣列不會繼承Object[]

範例程式:
class myBase1 { }

class myBase2 extends myBase1 { }

public class myInstanceof extends myBase2 {
  public static void main(String[] args) {
    myBase1 b1 = new myBase1();
    myBase2 b2 = new myBase2();
    myInstanceof i1 = new myInstanceof();

    if (i1 instanceof myBase1) {
      System.out.println("i1myBase1的後代");
    }
    else {
      System.out.println("i1不是myBase1的後代");
    }

    if (b1 instanceof myInstanceof) {
      System.out.println("b1myInstanceof的後代");
    }
    else {
      System.out.println("b1不是myInstanceof的後代");
    }

    if (null instanceof myBase1) {
      System.out.println("nullmyBase1的後代");
    }
    else {
      System.out.println("null不是myBase1的後代");
    }

    myBase2[] b2array = new myBase2[10];
    if (b2array instanceof Object) {
      System.out.println("b2arrayObject的後代");
    }
    else {
      System.out.println("b2array不是Object的後代");
    }

    if (b2array instanceof Object[]) {
      System.out.println("b2arrayObject[]的後代");
    }
    else {
      System.out.println("b2array不是Object[]的後代");
    }

    int[i = new int[10];
    if (i instanceof Object) {
      System.out.println("iObject的後代");
    }
    else {
      System.out.println("i不是Object的後代");
    }

    /*
    //錯誤狀況1
    if (i instanceof Object[]) {
      System.out.println("iObject[]的後代");
    }
    else {
      System.out.println("i不是Object[]的後代");
    }

    //錯誤狀況2
    Long lng = new Long(10);
    if (lng instanceof String) {
      System.out.println("lngString的後代");
    }
    else {
      System.out.println("lng不是String的後代");
    }
    */
  }
}


執行結果:
i1myBase1的後代
b1不是myInstanceof的後代
null不是myBase1的後代
b2arrayObject的後代
b2arrayObject[]的後代
iObject的後代

錯誤狀況1:
"myInstanceof.java": Error #: 365 : cannot compare int[] with java.lang.Object[]

錯誤狀況2:
"myInstanceof.java": Error #: 365 : cannot compare java.lang.Long with java.lang.String



沒有留言:

張貼留言