java中包到底是什么意思?包访问权限又是什么意思,有C++基础。

是否是说 first.java中有A B C 三个类,second.java中有D E F 三个类,那么first和second是两个不同的包?
包访问是说我可以在first.java中访问second的某些方法或生成D E F对象吗?

是否是说 first.java中有A B C 三个类,second.java中有D E F 三个类,那么first和second是两个不同的包?不是,这是java文件的组织方式,因为java强制要求一个public类必须在一个同名的文件中,但是多个包访问权限的类是可以在同一个文件夹中的

First.java

class A{
void print(){
System.out.println("A");
}
}
class B{
public void print(){
System.out.println("B");
}
}
class C{
public void print(){
System.out.println("C");
}
}

Second.java

class E{
public void print(){
System.out.println("E");
}
}
class D{
public void print(){
System.out.println("D");
}
}
class F{
public void print(){
System.out.println("F");
}
}

A B C D E F都是在同一个包中,而不是ABC在firstFirst包中,而DEF在Second包中

改写Second.java

package package2;
class E{
public void print(){
System.out.println("E");
}
}
class D{
public void print(){
System.out.println("D");
}
}
class F{
public void print(){
System.out.println("F");
}
}

你现在first.java中是无法访问EDF类的,这才是包的概念,另一个包中的(First.java中的ABC是在默认包中也是另外一个包)是无法访问EDF类的,因为他们是包访问权限,类只有两种权限,包访问权限和public权限

包访问是说我可以在first.java中访问second的某些方法或生成D E F对象吗?

是说如果first.java和second.java是在同一个包中,那么是可以的,但是如果不在同一个包中,并且那些类或方法是包访问权限,那是没有办法访问的

在添加一个类Third.java

package package2.third;
class Third{
public void print(){
System.out.println("E");
}
}
class D{
public void print(){
System.out.println("D");
}
}
class F{
public void print(){
System.out.println("F");
}
}


这些类都是包访问权限,那么E.java中的类可以访问吗?不可以,包没有嵌套的概念,即使Third.java是在E.java的的子包中即E.java在package2中,而Third.java在package2.third

java中类的访问权限(不是内部类,内部类必须另加讨论)只有public和包访问权限,要么所有包中的类和方法都可以访问,要么只有在同一个包中的类才能访问,并且

package package2.third;

是在package2.third包中

package package2;

实在package2包中,这是两个不同的包,即使在电脑上third文件夹是在package2文件夹中

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-01-17
包在标准类及程序的组织中并不显眼,但是它们会影响用于类的名字以及这些类包含的变量和方法的名字。本质上,包(package)是一个唯一命名的类的集合。将类集合到包中的主要原因,是为了当在应用程序中使用预先编写的类时避免与类自身可能引起的命名冲突。用于包中的类名不会妨碍另一个包或程序中的类名,因为包中的类名都是通过包名加以限定的。因此,之前使用的String类存在于java.lang 包中,所以String 类的全名是java.lang.String。可以使用非限定名称是因为java.lang包中的所有类在程序代码中总是可用;对于java.lang 包中所有的名称而言,已经有一条隐式的import语句在执行。如果恰好已经用名称String 定义了一个自己的类,使用String 名称会指向您自己的类,但是仍然可以通过在代码中使用全名java.lang.String 来调用同名的库类。Java 中的每个类都包含在一个包中,包括在例子中已经定义的所有类。之所以到目前为止还没有看到很多指向包名的引用,是因为已经在隐式地使用默认包(default package)来保存类,而这并没有名称。Java 中所有的标准类都包含在一系列包中,而且每个包包含的类都在某种程度上相关。包含到目前为止使用的大多数标准类的包称为java.lang,之所以取这个名字,是因为包中的所有类都提供与Java 语言相关的支持。还没有在代码中看到任何指向java.lang 的显式引用,因为这个包在程序中自动可用。之所以这样安排,是因为java.lang 中的有些类,比如String,在每个程序中都会使用。如果使用其他包含标准类的包中的类,就需要使用类的完全限定名称或是显式地将完全类名导入到程序中。
第2个回答  2014-01-17
不是的,亲
java里边 的包就相当于一个文件夹,比如我们电脑硬盘里边,一般都会创建许多文件夹来存放不同的文件。比如
D盘下边有 视频文件夹 音乐文件夹 游戏文件夹 等,能够方便我们管理这些不同的文件。

java的包也类似这种,一个项目 project 里边会分成多个模块,每个模块有多个类class组成,
为了方便管理这些类,我们把每个模块创建成一个包 package。

你说的包访问权限,应该是java类中的属性,修饰属性有限定符 public protected default private
用他们修饰的属性,具有不同的访问权限。
第3个回答  2014-01-17
不是你理解的那样,既然有C++基础,那么类比过来:java中的包(关键字用package)就相当于C++的命令空间(关键字用:namespace)。要判断first.java与second.java是否属于同一个包,只需要看他们两个文件里面是否加入了相同的package(“命名空间”)。你说的包访问权限应该是指类访问权限吧,可以参考这篇帖子:http://www.cnblogs.com/xwdreamer/archive/2012/04/06/2434483.html
第4个回答  2014-01-17
你说的并不是包,你说的是一个.java文件中包含了多个类。
包:如果要用包的话,比如A.java在com.a.b.c下。
在.java文件中第一行就写pacakge com.a.b.c;

因为如果所有的java文件都放到一起不方便管理,所以就有了包的概念,就是方便管理类的。
假定A.java在com.a.b;B.java在com.a.c;
如果B要使用类A的话,需要通过import com.a.b.A;来引入A才可以访问。
相似回答