[英]Why an instance of anonymous class can be assigned to an Interface variable?
[英]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.