簡體   English   中英

為什么可以將變量分配給接口類型?

[英]Why can variables be assigned to interface type?

我是Java的新手,正在嘗試學習接口的概念。 我在網上看到下面的代碼。 我知道該接口無法實例化。 我的問題是,WatchService,Path,WatchKey和WatchEvent都是接口,如何將變量分配給接口類型? 與實例化一樣嗎?

import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.nio.file.Paths;
import static java.nio.file.StandardWatchEventKinds.ENTRY_CREATE;
import java.nio.file.WatchEvent;
import java.nio.file.WatchKey;
import java.nio.file.WatchService;

public class WatchServices {

    public static void main(String[] args) throws IOException {
        WatchService ws1 = FileSystems.getDefault().newWatchService();

        Path p1 = Paths.get("/Users/justin/Desktop/Codes Netbean/JavaRandom");

        WatchKey wk1 = p1.register(ws1, ENTRY_CREATE);

        while(true){
            for(WatchEvent<?> event : wk1.pollEvents()){
                System.out.println(event.kind());
                Path file  = (Path)event.context();
                System.out.println(file);
            }
        } 
    }
}

我會舉一個例子。

假設我請你帶我一個 然后,您給我帶來一個沙灘球。

球體不存在,它是一個概念,一個幾何對象,而沙灘球是可以視為球體的物質對象。

這幾乎是同一回事,一個interface通過其公開的接口(可以在假裝implement該接口的對象上調用的方法)定義對象的特性,但它本身並不是實質性的對象。

因此,即使該球不存在,我也可以將沙灘球視為一個球。 實例化一個球體沒有任何意義,因為無法實例化一個球體,但是我可以將沙灘球視為一個球體。

接口定義了一組可以調用但不實現的方法。 這就是為什么您永遠不能說Runnable x = new Runnable() 可以定義一個類,該類實現接口中的所有方法。 它還必須聲明它實現了該接口:

interface Runnable {
    public void run();
}

public class RandomTask implements Runnable {
    public void run() {
        System.out.println("Doing some stuff...");
    }

    public void shout() {
        System.out.println("DOING STUFF...");
    }
}

查看類如何實現接口。 因此,RandomTask 可運行的,因此您可以在需要Runnable的地方分配一個RandomTask:

Runnable x = new RandomTask();

該接口告訴您該對象上必須存在哪些方法。 我們知道x必須具有run()方法,因為它是Runnable。 所以我們可以說

x.run();

現在,當的程序員知道X有一個shout()方法,你不能訪問它。 通過將x分配給Runnable,可以將其限制為僅具有為Runnable定義的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM