2015-06-19 38 views
5

只有在同一個包和子包中才可以訪問接口嗎?只有在相同的包和子包中才可以訪問接口嗎?

我已經定義了默認修改器的界面:

package com.mycompany.myapp.dao; 

import java.io.Serializable; 

interface BaseDao<T, Id extends Serializable> { 
    public void create(T t);  
    public T readById(Id id); 
    public void update(T t);  
    public void delete(T t); 
} 

現在我有一個子包,我要定義一個實現BaseDao類。所以我寫了這個代碼:

package com.mycompany.myapp.dao.jpa; 

import java.io.Serializable; 

public class BaseDaoJpa<T, Id extends Serializable> implements BaseDao<T, Id> { 
... 
} 

但我得到這個錯誤:

BaseDao cannot be resolved to a type

所以這是從Java的限制爲接口還是我做錯了呢?

感謝

+2

順便說一句,沒有兒童包! – Hiru

+1

[沒有_child_軟件包或_sub_軟件包](http://stackoverflow.com/questions/7847568/relation-between-package-and-a-sub-package-in-java) – Raedwald

回答

10

在Java中有沒有這樣的事,作爲一個「子包」。不要被點所迷惑。 com.mycompany.myapp.daocom.mycompany.myapp.dao.jpa是兩個分開的包,它們彼此沒有關係。

所以要回答你的問題:不,只有子包才能看到界面。您可以公開您的界面,但其他所有軟件包都可以看到它。

+1

並且不要忘記'import com.mycompany.myapp.dao.BaseDao;'com.mycompany.myapp.dao.jpa.BaseDaoJpa'內。您需要導入它,因爲 - 正如@Hoopje所解釋的那樣 - 這些軟件包是無關的。 – Turing85

+0

那麼在Java中沒有包層次結構的概念?儘管如果您在Windows資源管理器中物理地查看它們,您可以看到該層次結構。 – srh

+0

我相信問題是*爲什麼我不能訪問我的界面在一個不同的包*而不是*你能限制一個接口到子包* – CKing

4

的Java接取修飾符一看: https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

在表中可以看出,默認沒有修改僅限於由同一個類或其它接取在同一個包中的類。據我瞭解,你希望它可以被其他軟件包看到,但對世界不可見,因此你需要使用受保護的修飾符,但這是不可能的,因爲它不適用,所以回到你的問題不,你不能 : - (

+1

謝謝。接口的'protected'修飾符正是我所需要的,但java不支持它;不知道爲什麼? – srh

+0

它沒有理由存在xD。 編輯:看看這裏:http://stackoverflow.com/questions/3869556/why-a-class-cannot-be-defined-as-protected –

0

看起來你有延伸你需要實現

public class BaseDaoJpa<T, Id extends Serializable> implements BaseDao<T, Id>  
{ 
... 
} 
+0

謝謝。接得好。我已經修復了OP。 – srh

1

如果你正在尋找一些方法來隱藏,只有你想要的東西暴露在Java應用程序的其餘部分。 ,也許你想要一個組件,所以看看OSGi。This question是一個很好的開始閱讀之前跳躍(或不)到它。

相關問題