面向对象编程(三)封装--包

打包的意义:

①   标准Java库是由一系列包组成,包括java.lang,java.util,java.net等。标准Java包就是层次型包结构,就如同硬盘上嵌套的子目录一样,我们可以使用嵌套层次结构来组成包;

②   Java的包是为了更好地规划代码,防止命名冲突和混乱。所以Java出现了打包机制;

③   当把类组织起来放进一个包内之时,也就给包中的成员赋予了相互访问的权限,就“拥有”了该包内的程序代码;

④   包访问权限为把类聚集在一个包中这一做法提供了意义和理由;

package----声明包

 

package com.iotek.ch09;

public class lotekTeacher{

           private String name;//教师的姓名

           private int age;//教师的年龄

           /**

           *包访问权限

           *@return 自我介绍的内容

           */

           String introduction(){

         return “大家好我是”+name+”,今年”+age+”岁”;

}

}

①   包名由小写单词组成;

②   Java程序员都可以编写属于自己的Java包,为了保障每个Java包命名的唯一性,编程规范要求程序员在自己定义包的名称之前加上唯一前缀;

③   由于互联网上的域名名称是不会重复的,所以一般推荐采用公司在互联网上的域名的倒置作为包的唯一前缀;

 

一个类可以使用同一包中所有类以及其它包中的所有公开类

我们可以通过两种方式访问其它包中的公开类

①   简单在每个类前面加上完整包名,例如java.util.Date today=new java.util.Date();

②   更简洁更通用的方式是:使用import语句来导包

import java.util.Date;

Date today=new Date();

 

可以import特定类,也可以导入整个包。通过在源代码文件的顶部(在打包语句后)使用import导入语句来实现。

步骤:

在d盘下的javastudy文件夹中创建一个package文件夹,在其内编写Dog.java名称的程序

源程序

1 package com.iotek.entity;
2 public class Dog{
3     String name;
4     public int age;
5     public void show(){
6         System.out.println(name+"------"+age);
7     }
8 }
View Code

上面的打包路径为com下的iotek下的entity中

 

编译方法:进入程序路径后 javac –d . Dog.java

编译成功后,会在包路径下产生编译好的文件

 

同一个包中

在编写一个DogTest的源程序

1 package com.iotek.entity;
2 public class DogTest{
3     public static void main(String [] args){
4         Dog dog=new Dog();
5         dog.name="旺财";
6         dog.age=5;
7         dog.show();
8     }
9 }
View Code

编译通过之后

运行方法:java com.iotek.entity.DogTest

 

前面Dog.java中的name属性在同个包中的其它类是可以访问的。

 

不同包中

先将com文件夹删除

DogTest.java中包路径更改为package com.iotek.test;

如下

1 package com.iotek.test;
2 public class DogTest{
3     public static void main(String [] args){
4         Dog dog=new Dog();
5         dog.name="旺财";
6         dog.age=5;
7         dog.show();
8     }
9 }
View Code

同样先编译Dog.java程序,在编译DogTest.java程序,此时编译不通过

然后将DogTest.java程序再次更改

1 package com.iotek.test;
2 public class DogTest{
3     public static void main(String [] args){
4         com.iotek.entity .Dog dog=new com.iotek.entity . Dog();
5         dog.name="旺财";
6         dog.age=5;
7         dog.show();
8     }
9 }
View Code

此时编译还是不通过

原因是Dog.java中的name属性引起的错误,应该将其更改为public String name;

源程序如下

 1 package com.iotek.entity;
 2 public class Dog{
 3     //String name;//同个包中的其它类是可以访问的,
 4     //不同包中的其它类不能访问使用默认访问修饰符的属性和方法
 5     public String name;
 6     public int age;
 7     public void show(){
 8         System.out.println(name+"------"+age);
 9     }
10 }
View Code

更改后重新编译Dog.java,再次编译DogTest.java,此次未报错,成功生成

然后运行java com.iotek.test.DogTest

但DogTest.java中的全局包名太过麻烦,每次使用都要写

再更改为用import导入的方法,package必须写第一句

 1 package com.iotek.test; 
 2 import com.iotek.entity.Dog; 
 3 public class DogTest{
 4     public static void main(String [] args){
 5         Dog dog=new Dog();
 6         dog.name="旺财";
 7         dog.age=5;
 8         dog.show();
 9     }
10 }
View Code

 再次编译也能够执行。

 

综上:

Dog.java和DogTest.java的最终代码如下

 1 package com.iotek.entity;
 2 public class Dog{
 3     //String name;//同个包中的其它类是可以访问的,
 4     //不同包中的其它类不能访问使用默认访问修饰符的属性和方法
 5     public String name;
 6     public int age;
 7     public void show(){
 8         System.out.println(name+"------"+age);
 9     }
10 }
Dog.java
 1 package com.iotek.test;
 2 import com.iotek.entity.Dog;
 3 public class DogTest{
 4     public static void main(String [] args){
 5         Dog dog=new Dog();
 6         dog.name="旺财";
 7         dog.age=5;
 8         dog.show();
 9     }
10 }
DogTest.java

然后依次

javac –d . Dog.java

javac –d . DogTest.java

java com.iotek.test.DogTest

就可以完成包的创建及其调用

原文地址:https://www.cnblogs.com/wzy330782/p/5274005.html