我正在關注 Head first java 這本書,并且正在閱讀有關執行緒的內容并了解了 Runnable 介面。現在我們知道不能直接實體化介面。它的成員由實作介面的任何類實作,但下面的代碼使我頭頂上的彈跳器。書中宣告了Runnable介面的實體,并分配了runnable介面的實作類的物件。
public class MyRunnable implements Runnable {
public void main() {
go();
}
public void go() {
doMore();
}
public void doMore() {
System.out.println("top of the stack");
}
}
class ThreadTester {
public static void main(String[] args) {
Runnable threadJob = new MyRunnable();
Thread myThread = new Thread(threadJob);
myThread.start();
System.out.println("back in pain");
}
}
我無法理解這條線Runnable threadJob = new MyRunnable();。在不允許時如何實體化介面。為什么不能像線一樣 MyRunnable threadJob = new MyRunnable();。我的意思是 MyRunnable 類通過了 Runnable 介面的 IS-A 測驗,所以為什么作者選擇了前一種說法。這是我在這里想念的東西。請幫我澄清一下。
uj5u.com熱心網友回復:
現在我們知道不能直接實體化介面。
您沒有Runnable直接實體化介面。
希望您同意以下內容應該有效:
MyRunnable threadJob = new MyRunnable();
Runnable runnable = threadJob; // since threadJob is a Runnable
那么為什么這條線不作業呢?
當我們說你不能直接實體化一個介面時,這意味著你不能寫
Runnable runnable = new Runnable();
這是唯一行不通的事情。
uj5u.com熱心網友回復:
在 OOP 中稱為多型性。
它說您可以從 classB(假設ClassB是的子類ClassA)定義具有ClassA型別的變數,然后從實體化ClassB并將其分配給該變數。
例如在 java Object 類是任何類的根,所以你可以這樣做:
Object x = new YourClass();
或者,例如,如果您的班級implements InterfaceA可以這樣做:
InterfaceA x = new YourClass();
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/471699.html
下一篇:為什么此代碼片段存在分段錯誤?
