一、JAVA访问修饰符
访问修饰符,用来控制类中成员的可见性
有四个访问修饰符,分别是:default,private,public,protected
1、default(默认):默认权限,不用写的。在同一包内访问。
2、private(私有):只能在同一类中访问。
3、public(公有):在任何地方都可以访问
4、protected(受保护的):子父类(即使子父类不在同一包)和本包中可访问。
public > protected > default > private
public protected default private
同一类 ok ok ok ok
同一包 ok ok ok
子类 ok ok
不同包 ok
二、包package
在大型项目中,往往会有几十甚至几百个类,如果不对类进行分类管理,后期进行维护时会有很大的不便。
所以,需要对类(或其它类型)进行分类组织管理,这种机制就称为“包”。
“包”是类的容器,用于分隔类名空间。如果没有指定包名,所有的示例都属于一个默认的无名包。
包的作用:
1、区分相同名字的类。同一包中的类,不能同名。但是不同包的类,可以同名。
2、当类很多时,方便管理。
3、控制访问范围。
包名命令规范
package,包名一律都小写
JAVAC编译方式:
当定义包时,JAVAC编译命令:javac+源文件目录+java源文件名
如果是在源文件当前目录生成包和文件: javac -d . +java源文件名 (.点代表当前目录)
如下文件
package pack;
class PackageDemo
{
public static void main(String[] args)
{
System.out.println("Hello Package");
}
}
保存在 D:\java0217\day10
javac编译命令:
javac -d d:\java0217\day10 PackageDemo.java
javac -d . PackageDemo.java
访问用java 包名.类名
如果要将class文件生成在指定的目录,JAVAC编译命令:javac+-d+指定生成目录+java源文件名
D:\myclass目录中生成类文件,javac -d d:\myclass PackageDemo.java
再设置类目录 set classpath=d:\myclass,即可访问
包之间的访问:
访问不同包中的class,需要导入包import
如下,定义一个新的Job类,并且将Job类放在study包内
package study; //定义study包
public class Job { //包中定义Job类
public String jobName;
public void show(){
System.out.println(jobName);
}
}
然后在包中访问这个job类时,需要import导入study包中的job类:
import study.Job; //导入study中的Job类
public class MyTest {
public static void main(String[] args)
{
Job myJob=new Job(); //实例化Job类
myJob.jobName="工程师"; //调用类的成员属性
myJob.show(); //调用类的成员方法
}
}
输出结果:
工程师
进一步说明:按以上导入包类的方法,如果study包中定义了N侈个类,则每次实例化不同类的对象时,都需要写import study.xxxx,如有100个类就要写100次import,较麻烦
我们可以用星号*代替包中的所有类名,一次性导入包中的所有类——import study.*
import study.*; //一次性导入study包中的所有类
public class MyTest {
public static void main(String[] args)
{
Job myJob=new Job();
myJob.jobName="工程师";
myJob.show();
}
}
注:
同一包中的类,不但表示其在同一包容器中,同时,还处于同一物理路径中。
定义class时,建议都要设置package,尽量不要放在默认包中。