在"OOP入门:深入研究继承和多态性"这篇文章中,我们继续讨论了继承和多态性的好处.我们还学习了其它的东西:
- 虽然Java只支持从一个父类继承,但它使用接口的方式支持多重继承.
- 接口实现了多态,使得我们能够给与对象不同特性以满足不同的需要.
- 你可以使用多态机制让完成相似功能的不同的方法拥有相同的名字但是拥有不同的参数列表.
- 动态/运行时的绑定机制允许一个对象在运行时被强制转化成你所需要的对象类型,前提是这个对象实现了必需的接口或者括展了特定的父类.
下面我们将讨论通过限制对对象属性和方法的访问来强制实现对多重接口实现和父类拓展的正确使用的目的和实用性.
黑箱方法:封装
一个基本的面向对象的概念就是封装--将表示一个对象状态的数据与其它对象隔离开来.这一点是通过一个通常叫做作用域的概念来实现的.作用域指的是编程语言的一种能力,这种能力被用来实现一些限制对类或者结构体成员变量的访问的规则.大多数面向对象的语言支持作用域机制,这些机制通常是通过诸如public,
protected, 和 private之类的特殊关键字来实现的.
Java提供了四种不同的作用范围:public, package, protected, 和 private.任何类,方法或者成员变量都能通过使用public,
protected, 和
private关键字来显式的加以保护.任何类,方法,或者成员变量如果没有使用上面的关键字都将被隐式的给与package的作用范围.所有这些就构成了Java中命名空间的概念.
命名空间和软件包
一个命名空间可以被看成是在一个给定的上下文中一组相关的名字或是标识符.命名空间避免了拥有相同名字或标识符的实体存在于同一个上下文里.这里隐含的意思是只要实体是存在于不同的命名空间中,那么拥有相同名字或者标识符的实体就能够呆在一块儿.Java使用软件包的概念来实现命名空间和作用范围控制.
软件包是一个在统一的名字下的类和接口的集合.每一个类或者接口都必须存在于用package关键字构成的软件包申明语句定义的命名空间中.例如,下面的申明语句:
package com.mycompany.apps.HelloWorld;
它申明了一个存在于com.mycompany.apps软件包中的名叫HelloWorld的类或者接口.软件包申明总是放在包含了类或者接口定义的文件的顶部.
在java开发界,目前对软件包的命名有一个建议,就是使用公司或组织的域名(以相反的顺序),作为你的软件包的第一部分.因为域名是全球唯一的,所以使用你的域名来命名你的软件包也能使你软件包的名字全球唯一.
如果一个Java类或者接口没有包含一个软件包申明,那么它就属于"unamed
package,"也就是没有名字的软件包.无名的软件包应该只用来测试程序或是代码原型等等.
|