1. 程式人生 > >abstract interface 和 interface 沒有區別

abstract interface 和 interface 沒有區別

前一段用到Spring的ApplicationContext介面,檢視它提供的方法,開啟jar包,看到的資訊如下: 
Java程式碼 
  1. public abstract interface org.springframework.context.ApplicationContext extends ... {  
  2.     public abstract org.springframework.context.ApplicationContext getParent();  
  3.     ...  
  4. }  


發現interface前有個abstract,怎麼還有抽象介面(abstract interface)一說,介面不都是抽象的嗎,這樣寫難道還有什麼特殊意義,很是納悶。 


上網查詢一些資料,有的網友把一些有名的java書上寫的關於介面的論述貼了出來: 
在java in a nutshell裡, 
“All methods of an interface are implicitly abstract, even if the abstract modifier is omitted.” 
在thinking in java裡, 
“the abstract keyword, which allows you to create one or more methods in a class that have no definitions—you provide part of the interface without providing a corresponding implementation, which is created by inheritors. The interface keyword produces a completely abstract class, one that provides no implementation at all.” 

所以結論就是 abstract interface 就是interface,兩者根本沒有區別。 

但是為什麼他們要那樣寫啊,不是多此一舉嗎?是不是jar包中把隱含的abstract自動加上了呢,我又找到了原始碼,果然,原始碼中並沒有abstract: 
Java程式碼 
  1. public interface ApplicationContext extends ListableBeanFactory, HierarchicalBeanFactory,  
  2.         MessageSource, ApplicationEventPublisher, ResourcePatternResolver {  
  3.     ApplicationContext getParent();  
  4.     ...  
  5. }  


所以,結論就是: 
interface已經隱含是abstract的,interface與abstract interface的作用是一樣的,只是abstract interface是更完整的表示而已。