//包和权限:
// 以前我们编译java程序的时候用的命令类似于 javac A.java 将在当前目录下
// 生成A.class
// 那我能不能把class文件放到其他目录下呢。是可以的,这就需要引入包的概念
// 包实际上就是文件夹。包实际上就是个文件夹,你可以在JAVA程序的源代码里面
// 用package指定一个文件夹的目录。当你编译这个程序的时候,编译结果就会存放到这个目录下面。
//这跟hellowrold 第一个程序不一样的地方就是,我们在前面加上一个package
//package a.b.c.d这就表示你去编译这个程序的时候,就会放在a/b/c/d这四级目录下面
//编译的时候 用javac -d . xxxx.java 。这句话的意思就是在当前目录下生成这些目录,所以这里在当前目录下就会生成 a/b/c/d,然后在其目录下就会生成class。
//如果你要执行的话 就 java a.b.c.d.xxx
//譬如我们这里就是java Package_and_Permission
//这就执行出来了。
//
//我们为什么要引入包的概念。包的作用是什么,假设我们有一个很大的程序,他有很多人实现,有A B C D成千上万个人来实现那很有可能我在A里面会实现math.java
//C里面也有可能会实现同名的JAVA程序。这些文件我在存放的时候可以放到不同的目录。那怎么去使用呢,使用的时候我们肯定是使用不同目录下的那些类。使用的时候也是用目录来区分。在我们JAVA程序里面,这个目录就是包,我用包来区分。
package a.b.c.d;
public class Package_and_Permission
{
public static void main(String args[])
{
System.out.println("hello world");
}
}
//怎么去引用这些包呢,我要导进来,就用import。注意了,你这些类,你是放在其他文件里面实现的,我要使用你,怎么办呢,在JAVA程序里面没有头文件,我们用import把它倒进来。
import lisi.a.*;
import zhangsan.*;
public class Package
{
public static void main(String args[])
{
System.out.println(lisi.a.Math.delete(4,3));
System.out.println(zhangsan.Math.add(1,5));
//如果没有同名的类的话,我们可以不用xx.xxx.xxx.xxx去限制一个类
//比如说我们在 lisi.a下面有个Print类,类里面有个print函数
//我们只需要Print.print或者lisi.a.Print.print,一样的。
//在我们lisi下面有个class,在我们zhangsan里面有这些class
//但是我们想把我们的程序交给用户的时候怎么办呢,我们需要把Pack.class
//交给它,还需要把lisi和zhangsan目录教给他。我们可以用jar命令打包,然后我们export CLASSPATH=.:xxx.jar 这个表示编译器会在当前目录下找,找不到的话就去当前的xxx.jar里面找
}
}
//JAVA程序它有两个层次的访问权限。一个是类这一层,一个是类成员这一层。
//先看一下类这一层,对于一个class,可以用public来描述,也可以不用public来描述
//对于public class表示它可以在本包里面来访问,也可以被其他包访问。对于一般的class,它只能在本包里面来访问。记得是包,同一个包,就是同一个目录。
//
//
//类成员的权限
//类成员包括属性和方法,它们都有private default protected public
//private权限最小,只能在类内部访问。
//public权限最大,在任何地方都可以访问它。
//default是默认的权限,只能在同一个类内部访问额。或者同一个包来访问。在其他包用不了。
//protected跟default多了个不同包的子类可以访问。这里就是一个继承的问题,不同包的子类就是你继承了那个类,在不同包里实现。