Java 接口是否可能仅在同一包和子包中可访问?

Java 接口是否可能仅在同一包和子包中可访问?,java,interface,Java,Interface,接口是否可能仅在同一包和子包中可访问 我已经定义了一个带有默认修饰符的接口: 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)

接口是否可能仅在同一包和子包中可访问

我已经定义了一个带有默认修饰符的接口:

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无法解析为类型

这是Java对接口的限制还是我做得不对


谢谢

在Java中没有“子包”这样的东西。不要被这些点愚弄了
com.mycompany.myapp.dao
com.mycompany.myapp.dao.jpa
是两个独立的包,彼此没有关系


所以要回答您的问题:不,不可能使接口仅对子包可见。您可以公开您的接口,但其他所有软件包都可以看到它。

查看Java访问修饰符:

在该表中,您可以看到默认值无修饰符仅限于同一类或同一包中的其他类访问。据我所知,您希望它对其他软件包可见,但对世界不可见,为此您需要使用受保护的修改器,但这是不可能的,因为它不适用,所以回到您的问题不,您不能 :-(

看起来您在需要工具的地方进行了扩展

公共类BaseDaoJpa实现BaseDao
{
...
}

如果您正在寻找某种方法来隐藏并仅向Java应用程序的其余部分公开您想要的内容,那么您可能需要一个组件,所以请先看看OSGi。在跳转(或不跳转)之前阅读是不是一个好的开始进入它。

顺便说一句,没有子包!!!而且不要忘记导入com.mycompany.myapp.dao.BaseDao;在
com.mycompany.myapp.dao.jpa.BaseDaoJpa
中。你需要导入它,因为正如@Hoopje解释的那样,包是不相关的。所以在Java中没有包层次结构的概念?尽管你从物理上看它们例如,在Windows资源管理器中,您可以看到层次结构。我相信问题是,为什么我不能在不同的包中访问我的接口,而不是您可以将接口限制为子接口packages@ChetanKinger这不是OP写的。但OP想知道错误背后的原因。这才是真正的问题tion.Thank.很好的捕获。我已经修复了OP.Thank。
受保护的
接口修饰符正是我需要的,但java不支持它;不知道为什么?它没有存在的理由xD。编辑:看看这里:
package com.mycompany.myapp.dao.jpa;

import java.io.Serializable;

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