概述

对类文件进行分类管理。

给类提供多层命名空间。

写在程序文件的第一行。

类名的全称的是 包名.类名。

包也是一种封装形式。

访问权限

引用《The Complete Reference》中的经典例子来说明Java包中类成员的访问权限问题

下面的例子显示了访问修饰符的所有组合

该例有两个包和五个类

记住这两个不同包中的类需要被存储在以它们的包p1、p2命名的目录下。

第一个包定义了三个类:

Protection Derived 和 SamePackage:

Protection类以合法的保护模式定义了四个int变量

变量n默认权限

变量n_pri是private权限

变量n_pro是protected权限

变量n_pub是public权限。

Derived类作为Protection同一个包中的子类出现。

SamePackage类作为Protection同一个包中的非子类出现。

第二个包定义了两个类:

Protection2 和 OtherPackage。

Protection2类作为Protection的其他包中的子类出现。

OtherPackage类作为Protection的其他包中的非子类出现。

这些类都试图访问Protection中的所有成员,访问受限的语句被注释掉,并加以注明。

下面是Protection.java文件:

   1: package p1;

   2:  

   3: public class Protection

   4: {

   5:     int n = 1;

   6:     private int n_pri = 2;

   7:     protected int n_pro = 3;

   8:     public int n_pub = 4;

   9:  

  10:     public Protection()

  11:     {

  12:         System.out.println("base constructor");

  13:         System.out.println("n = "+n);

  14:         System.out.println("n_pri = "+n_pri);

  15:         System.out.println("n_pro = "+n_pro);

  16:         System.out.println("n_pub = "+n_pub);

  17:     }

  18: }

下面是Derived.java文件:

   1: package p1;

   2:  

   3:  

   4: class Derived extends Protection

   5: {

   6:     Derived()

   7:     {

   8:         System.out.println("derived constructor");

   9:         System.out.println("n = "+n);

  10:  

  11:         //class only

  12:         //System.out.println("n_pri = "+n_pri);

  13:  

  14:         System.out.println("n_pro = "+n_pro);

  15:         System.out.println("n_pub = "+n_pub);

  16:     }

  17: }

下面是SamePackage.java文件:

   1: package p1;

   2:  

   3: class SamePackage

   4: {

   5:     SamePackage()

   6:     {

   7:         Protection p = new Protection();

   8:         System.out.println("same package constructor");

   9:         System.out.println("n = "+p.n);

  10:  

  11:         //class only

  12:         //System.out.println("n_pri = "+p.n_pri);

  13:  

  14:         System.out.println("n_pro = "+p.n_pro);

  15:         System.out.println("n_pub = "+p.n_pub);

  16:     }

  17: }

下面是Protection2.java文件:

   1: package p2;

   2:  

   3: class Protection2 extends p1.Protection

   4: {

   5:     Protection2()

   6:     {

   7:         System.out.println("derived other package constructor");

   8:  

   9:         //class or package only

  10:         //System.out.println("n = "+n);

  11:  

  12:         //class only

  13:         //System.out.println("n_pri = "+n_pri);

  14:  

  15:         System.out.println("n_pro = "+n_pro);

  16:         System.out.println("n_pub = "+n_pub);

  17:     }

  18: }

下面是OtherPackage.java文件:

   1: package p2;

   2:  

   3: class OtherPackage

   4: {

   5:     OtherPackage()

   6:     {

   7:         p1.Protection p = new p1.Protection();

   8:         System.out.println("other pacage constructor");

   9:  

  10:         //class or package only

  11:         //System.out.println("n = "+p.n);

  12:  

  13:         //class only

  14:         //System.out.println("n_pri = "+p.n_pri);

  15:  

  16:         //class,subclass or package only

  17:         //System.out.println("n_pro = "+p.n_pro);

  18:     

  19:         System.out.println("n_pub = "+p.n_pub);

  20:     }

  21: }

下面试试这两个包,通过以下两个测试文件

包p1的测试文件:

   1: /*

   2: Demo package p1.

   3: */

   4:  

   5: package p1;

   6:  

   7:  

   8: public class Demo

   9: {

  10:     public static void main(String[] args) 

  11:     {

  12:         Protection ob1 = new Protection();

  13:         Derived ob2 = new Derived();

  14:         SamePackage ob3 = new SamePackage();

  15:     }

  16: }

包p2的测试文件:

   1: /*

   2: Demo package p1.

   3: */

   4:  

   5: package p1;

   6:  

   7:  

   8: public class Demo

   9: {

  10:     public static void main(String[] args) 

  11:     {

  12:         Protection ob1 = new Protection();

  13:         Derived ob2 = new Derived();

  14:         SamePackage ob3 = new SamePackage();

  15:     }

  16: }

编译:

运行Demo1:

运行Demo2:

由此我们可以得到以下结论:

Java笔记(十八)……包的更多相关文章

  1. python3.4学习笔记(十八) pycharm 安装使用、注册码、显示行号和字体大小等常用设置

    python3.4学习笔记(十八) pycharm 安装使用.注册码.显示行号和字体大小等常用设置Download JetBrains Python IDE :: PyCharmhttp://www. ...

  2. 《java面试十八式》--引子

    爪哇城中   “喂,你等等我啊”少女气喘吁吁的喊道   “大小姐,你可快点吧,报名马上就要结束了.”   这是爪哇城一年一度的大选比赛,被选上的人会留下来任职,享有名誉和金钱,所以大家都在积极准备. ...

  3. java基础十[包、Jar存档文件和部署](阅读Head First Java记录)

    将Java的class文件生成为可执行的Java应用程序.Java应用程序有三种:完全在本机执行的Jar(例如本机的GUI可执行程序):完全在服务器端远程执行的(例如浏览器来进行存取):介于两者之间的 ...

  4. (C/C++学习笔记) 十八. 继承和多态

    十八. 继承和多态 ● 继承的概念 继承(inheritance): 以旧类为基础创建新类, 新类包含了旧类的数据成员和成员函数(除了构造函数和析构函数), 并且可以派生类中定义新成员. 形式: cl ...

  5. Java基础学习笔记十八 异常处理

    什么是异常?Java代码在运行时期发生的问题就是异常. 在Java中,把异常信息封装成了一个类.当出现了问题时,就会创建异常类对象并抛出异常相关的信息(如异常出现的位置.原因等). 异常的继承体系 在 ...

  6. Java学习笔记十八:Java面向对象的三大特性之封装

    Java面向对象的三大特性之封装 一:面向对象的三大特性: 封装 继承 多态   二:封装的概念: 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访 ...

  7. 黑马程序员 Java基础<十八>---> 网路编程

    --------------- ASP.Net+Android+IO开发S..Net培训.期待与您交流! --------------- 第一  概述 一.概述: 1.网络模型:OSI参考模型和TCP ...

  8. Java进阶(十八)Java实现定时器(Timer)

    Java实现定时器(Timer) 绪 在应用开发中,经常需要一些周期性的操作,比如每5分钟执行某一操作等.对于这样的操作最方便.高效的实现方式就是使用java.util.Timer工具类.java.u ...

  9. java基础(十八)----- java动态代理原理源码解析

    关于Java中的动态代理,我们首先需要了解的是一种常用的设计模式--代理模式,而对于代理,根据创建代理类的时间点,又可以分为静态代理和动态代理. 静态代理 1.静态代理 静态代理:由程序员创建或特定工 ...

随机推荐

  1. VC++2010添加菜单

    1  资源视图下面右键添加资源 选择menu 2  创建你想要的menu 3  找到CDialog::OnInitDialog();在后面添加代码. CMenu menu; menu.LoadMenu ...

  2. Python自省学习

    1. 访问对象的属性 class MyClass(): a=' b=' def __init__(self): pass def write(self): print self.a,self.b my ...

  3. 一个优秀php程序员应具备什么样的能力

    1:php能力 1.1 熟悉 一种或者几种框架,并可以用于开发 1.2 了解 这些框架中的优点与缺点 1.3 假如要你选择框架,你会使用哪种最适合你开发 2:数据库能力 2.1:能写一些简单的sql语 ...

  4. Network boot from AMD Am79C970A

    用虚拟机安装winxp系统,出现错误信息如下: Network boot from AMD Am79C970A Copright (c)2003-2005 Vmware, Inc. Copright ...

  5. Nhibernate 分页功能

    cs: public IEnumerable<ArticleView> MyGetAll(int start, int limit, ref int count) { try { var ...

  6. Oracle11g用户密码过期

    今天一早来了,发现部署的网站访问报500,看日志,显示数据库连不上.然后我用sqldeveloper登录同样登不上,于是想到了之前碰到过的一个问题,Oralce11g的新特性:密码180天自动过期.随 ...

  7. 纯JavaScript实现一些小功能

    题目链接:http://wenku.baidu.com/link?url=7Gbarr5q9X6h1QFRVAsHmfPp1xXagG209mvrJqBogseb4WLeRqbVKwxQieoh8SL ...

  8. [JavaScript] js获取Html元素的实际宽度高度

    第一种情况就是宽高都写在样式表里,就比如#div1{width:120px;}.这中情况通 过#div1.style.width拿不到宽度,而通过#div1.offsetWidth才可以获取到宽度. ...

  9. Twitter:蓄水池储水量问题

    早上买了两个饼夹肉,我吃了一个,辣椒粉好多,现在一直在实验室喝水. 一.倒数第n位 今年暑假去世纪佳缘面试,其中一题就是这个,只能遍历一遍链表求出倒数第n位. 答案是两个指针,第一个在头部设为A,第二 ...

  10. 《sql注入攻击与防御 第2版》的总结 之 如何确定有sql注入漏洞

    看完<sql注入攻击与防御 第2版>后,发现原来自己也能黑网站了,就一个字:太爽了. 简单总结一下入侵步骤: 1.确定是否有sql注入漏洞 2.确定数据库类型 3.组合sql语句,实施渗透 ...