1.package语句必须得是第一条语句
2.package zhangsan.lisi表示:把该文件中所有的类放入zhangsan.lisi这个包中,并且该文件中所有的类真正名字将是包名和类名的组合
3.如:类TestPackage的名字将变成zhangsan.lisi.TestPackage,而不再是TestPackage
4.编译是建议使用javac -d.TestPackage.java,尽量不要使用javac TestPackage.java。因为后者要自己手动建立包目录
javac -d .A.java//javac空格-d空格.空格A.java
-d表示自动生成包层
.表示这个包层是在当前目录下建立的
5。如果不在当前路径不运行程序则必须保证class文件的最上层目录的父目当位于classpat下。
dos命令:set classpath查看当前路径
set classpath = .....设置路径
java zhangsan.lisi.TestPackage解析
--先检测当前目录下是否有zhangsan/lisi这个包(包即文件夹),如果有,再检测包下是否有zhangsan.lisi.TestPackage这个类,如果没有,编译器将会再去classpath设置的路径中依次查找。如果都查找失败,则编译出错。
*/
package zhangsan.lisi;//在zhangsan文件夹lisi文件夹下放TestPackage.class和M.class
class A
{
public void f()
{
System.out.printf("AAAA\n");
}
}
class TestPackage
{
public static void main(String[] args)
{
new A().f();//运行时打java zhangsan.lisi.M
}
}
------------------------------------------------------------------------
同包访问
class A
{
public void f()
{
System.out.printf("AAAA\n");
}
}
+++++++++++
class B
{
public static void main(String[] args)
{
A aa = new A();
aa.f();
}
}
/*同包不同类的相互访问
执行命令如下:javac A.java B.java
java B
输出结果:AAAA
附注:因为类A和类B默认是在同一个无名的包中所以彼此可以相互访问,只要是非私有的成员都可以被同包的另一个类访问
----------------------------------------------------------------------------
不同包访问
/*不同访问修饰符(重点)
1.在同一个包中只有私有的不能被另一个类访问,也只有私有的不能被继承
2.在不同包没有任何关系的两个类,只有public类的public成员才可以被另一个包中的类访问
3.在不同包中有继承关系的两个类,只有public类的public成员和public类的protected成员可以被另一个包中的子类在内部使用,但是在子类的外部,通过子类对象名只能访问父类的public成员
*/
package zhangsan.lisi;
public class A//要加上public
{
public void f()//同上
{
System.out.printf("AAAA\n");
}
}
//只有公有的才能被另一个包访问
//编译:javac -d . A.java B.java
//运行 java com.ruide.B
+++++
package com.ruide;
//import zhangsan.lisi.*;//把zhangsan.lisi文件夹下所有的类加载进来
//import zhangsan.lisi.A//把zhangsan.lisi文件夹A类加载进来
class B
{
public static void main(String[] args)
{
//zhangsan.lisi.A aa = new zhangsan.lisi.A();
A aa= new A();
aa.f();
}
}
----------------------------------------------------------------------------------------
继承
package zhangsan.lisi;
public class A
{
public void g()
{
System.out.printf("GGGG\n");
}
protected void b()
{
System.out.printf("BBBB\n");
}
}
++++++++++
package com.ruide;
import zhangsan.lisi.*;
class B extends A
{
public void f()
{
g();//ok
b();//ok, 在子类内部可以访问从另一个包继承过来的父类的public和protected成员
}
}
class M
{
public static void main(String[] args)
{
B bb = new B();
//bb.f();//ok
//bb.g();//ok
bb.b();//错误。要改为public
}
}