java - 导入包会改变类的可见性吗?

标签 java import package private

我才知道

A class may be declared with the modifier public, in which case that class is visible to all classes everywhere. If a class has no modifier (the default, also known as package-private), it is visible only within its own package.

这是一个明确的声明。但是这些信息干扰了我对包导入的理解(这很容易出错)。我认为导入包可以使导入包中的类对导入类可见。

那么,它是如何工作的呢?在包含公共(public)类的包被导入的条件下,公共(public)类是否对所有类都可见?或者没有这样的条件?包私有(private)类呢?无论是否导入包含包,它们都是不可见的?

添加: 在我看来,我得到了 2 个答案,它们被标记为好(投票赞成)并且相互矛盾。

最佳答案

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

import java.util.*;

class ImportTests {
    private Collection collection;
}

编译成与此类相同的代码

class ImportTests {
    private java.util.Collection collection;
}

第一个类中的 import 语句不会改变 Collectionjava.util 中的任何其他类的可见性 package it只是让 ImportTests 类可以引用 Collection 而无需完全限定名称。

关于java - 导入包会改变类的可见性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2398050/

相关文章:

java - 从 Java GUI 到 MATLAB 的图像

python - 导入错误 : No module named utils

python - 如何将 os 变量导入 PYTHON 并更新它?

android - 两个不同的应用程序可以具有相同的 packageName 吗?

Java:附加字符串需要删除某些部分

Java:多线程内的 XA 事务传播

python - 禁止子模块出现在带有 __init__.py 的命名空间中

python - 可以导入 python 包,但不能导入其模块

c# - 如何在C# winforms控件上嵌入Java控件?

java - 关于servlet多线程环境的问题