是否可以只在同一个包和子包中访问接口?

时间:2015-06-19 14:39:25

标签: 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);    
    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无法解析为类型

这是Java对接口的限制,还是我做错了?

由于

4 个答案:

答案 0 :(得分:11)

在Java中,没有“子包”这样的东西。不要被点缀所欺骗。 com.mycompany.myapp.daocom.mycompany.myapp.dao.jpa是两个独立的包,彼此无关。

所以回答你的问题:不,不可能只对子包提供界面。您可以将您的界面公开,但随后它将对所有其他包可见。

答案 1 :(得分:4)

查看 Java Acess Modifiers https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

在表格中,您可以看到 默认 无修饰符 仅限于相同的访问权限同一个包中的类或其他类。据我所知,你希望它对其他包也是可见的,但不是对世界可见,为此你需要使用保护修饰符,但它是不可能的,因为它不适用所以回到你的问题没有你不能 : - (

答案 2 :(得分:1)

如果您正在寻找某种方法来隐藏和暴露您想要的其他Java应用程序,可能您需要一个组件,所以看看OSGi。在跳跃(或不跳入)之前,This question是一个良好的开端。

答案 3 :(得分:0)

看起来你 extends 你需要 implements

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