导入包是否会改变类的可见性?

Rom*_*man 3 java import private package

我知道了

可以使用修饰符public声明一个类,在这种情况下,该类对于所有类都可见.如果类没有修饰符(默认值,也称为包私有),则只能在其自己的包中显示.

这是一个明确的陈述.但是这些信息干扰了我对包裹进口的理解(这很容易就是错误的).我认为导入一个包我从导入包中可以看到导入类的类.

那么它是怎样工作的?导入包含公共类的包的条件下,所有类都可以看到公共类吗?还是没有这样的条件?包私有类怎么样?如果包含的包装是否被导入,它们是不可见的?

补充:在我看来,我得到了2个被标记为良好(被投票)并且相互矛盾的答案.

Yan*_*mon 6

导入类不会以任何方式更改其可见性.将类导入到另一个类或多或少只是一种使源代码可读的方法,因此您不必一直输入完全限定的类.例如这个类

import java.util.*;

class ImportTests {
    private Collection collection;
}
Run Code Online (Sandbox Code Playgroud)

编译成这个类的相同代码

class ImportTests {
    private java.util.Collection collection;
}
Run Code Online (Sandbox Code Playgroud)

import一个类中的语句不会更改它所Collection包含的java.util包中的任何其他类的可见性,因此ImportTests类可以在Collection没有完全限定名的情况下引用它.

  • 没有必要使用任何导入来引用另一个包中的公共类.如我的第二个示例所示,类可以使用其完全限定名称直接引用另一个类而无需导入.你可以用这种方式编写一个完整的类,虽然这个类不必要很长并且可能不可读. (2认同)