老兄,如果你import的两个包中都有一个叫Applet的类的存在, 那你在程序里如果直接只写Applet的话, 编译器就会告诉你有重名存在,要你写清楚一点,也就是要清楚地这样写: public class xxxx extends java.awt.Applet 而不是 public class xxx extends Applet, 否则根本就通不过编译的,不信尽管一试。biti_9512207讲的没错,这就是一个命名空间的问题, 而且这是一个优点,不是你想象的一个不方便之处, 可以去参看一下为什么C++中要引入namespace这个关键字的用意, 这正是java是从C++中发展过来,而且吸收了C++的教训之后才拥有的先进特性之一!
另外,在同一个package中的类,可以直接引用(除private、protect),不需要再导入了。
package一般是将一些功能相近的类放在一起,便于管理引用和识别。
可以想象一下,如果没有包的区别,类的同名将不可避免。
所以很多开发的第三方的类都将自己的域名倒转加到类前面作为包名来以示区分。
其实在一个package里面如果定义class
的时候没有标注是public之类的
那么就是java的default属性,在同包里面是
可以引用的
对于开放性来说:
PUBLIC>PROTECT>DEFAULT>PRIVATE
所以可以节省了思考类的访问问题
packname.yourclass.class而不是yourclass.class
有package命令编译程序会自己打包的,并把自己放到里面
当你要引用这些包时,你说是把源文件再考一遍到你的程序中还是只要指定一下classpath
变量方便。如果你只有几个类当然没什么必要打包,当你的项目很大是呢,不打包把他们放
在一起,那你自己都不知道管理你类了,更无从优化你的代码。好好想想吧。
就是 命名空间的管理
打个比方
a写了一个类叫Util
b写了一个类也叫Util
那启不是重了.
但java中类名指的是 包名+类名
所以如果a,b都按规则起包名的话
那就是a.Util/b.Util 就不重了
包名的规则是什么呢,就是最好和域名联系在一起
所以就有了
com.ibm.xxxClass
com.sun.xxxClass
那又怎样单独运行这些包中的类呢?
如import mypackage.Applet.class;(mypadckage是个目录,在CLASSPATH下的,但Applet.class只是在外面编译了一下拷入mypackage中,没用package包) 在同一个文件中又import java.applet.*;就会出现重名问题吗 ?
那你在程序里如果直接只写Applet的话,
编译器就会告诉你有重名存在,要你写清楚一点,也就是要清楚地这样写:
public class xxxx extends java.awt.Applet 而不是 public class xxx extends Applet,
否则根本就通不过编译的,不信尽管一试。biti_9512207讲的没错,这就是一个命名空间的问题,
而且这是一个优点,不是你想象的一个不方便之处,
可以去参看一下为什么C++中要引入namespace这个关键字的用意,
这正是java是从C++中发展过来,而且吸收了C++的教训之后才拥有的先进特性之一!
那么你用import mypackage.Applet; (注意:没有import mypackage.Applet.class 这种写法),就根本找不到这个类的!不信的话试试看好了。
另外如果import mypackage.Applet; 之后又import java.awt.*;
那么只要你直接引用Applet,就通不过编译!也就试试看好了。
那又怎样单独运行这些包中的类呢?
那又怎样单独运行这些包中的类呢?
java 类名
但是要指出的一点,一个类的名字全称就应该是 包名.类名! 只有一个例外就是没有用package声明过的类,包名是空的。所以运行一个包中的类例子如下:package abc;
public class def {
public static void main(String argv[]) {
....
} ....
}运行方法为: java abc.def
你该知道一个类可运行必须要有一个main方法吧。:)