程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> java-Java關於接口和類的對象的關系的問題

java-Java關於接口和類的對象的關系的問題

編輯:編程解疑
Java關於接口和類的對象的關系的問題

先上代碼
public interface Read{

}

public class Student implements Read{

}

public class Create{
private Read read;
public void setRead(Read read){
this.read=read;
}
public Read getRead(){
return this.read;
}
}

現在在另一個類的方法中
Read read=new Create().getRead();

下面有兩個問題:
1.如果 read instanceof Student 返回true 還是 false
2.Student stu=(Student)read; 能這麼寫麼?為什麼呢?

最佳回答:


首先,第一個問題,read instanceof Student返回值跟你的Read傳遞的實際類型有關系,如果傳遞的是一個Student對象,是會返回true的。
測試代碼:

 public class Create {
    private Read read;

    public void setRead(Read read) {
        this.read = read;
    }

    public Read getRead() {
        return this.read;
    }

    public static void main(String[] args) {
        Create t = new Create();
        t.setRead(new Student());
        Read read=t.getRead();
        System.out.println(read instanceof Student );
    }
}

修正你的Create代碼,傳遞Read對象為Student的實現時,第一個問題就是true,當然如果傳入的Read不是Student的實例,就是false.
其次,這個問題,跟第一個問題的本質是一樣的,要看傳遞的Read的實際類型是什麼,如果是我測試類給的Student的實例,那麼就能正確轉換成功,但是如果是其他Read的實現,這個這句話不會報編譯錯誤,卻會有運行時異常。測試代碼如下:

 public class OtherRead implements Read{

    @Override
    public void read() {
        System.out.println("other read.");

    }

    public static void main(String[] args) {
        Create t = new Create();
        t.setRead(new OtherRead());
        Read read=t.getRead();
        System.out.println(read instanceof Student );
        Student s = (Student)read;
    }
}

上述測試傳入的是其他Read的實現類的對象,那麼就會運行是異常:

 false
Exception in thread "main" java.lang.ClassCastException: bit.OtherRead cannot be cast to bit.Student
    at bit.OtherRead.main(OtherRead.java:16)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved