前言写过代码的人都有体会。如果你把一段代码搁置一段时间再回头看,你可能会找到更好的实现方式。这是重构背后的驱动力之一。一个软件或者产品总会产生这样一个不好的现象:软件产品是原厂制造的,经过精心设计,结构良好。但是随着时间的发展,需求的变化,需要不断的修改原有的功能,增加新的功能,难免有些缺陷需要修改。为了实施变更,不可避免地要违背原有的设计框架。一段时间后,软件的架构千疮百孔。但是,修改和完善代码的欲望之下也有着巨大的压力。通常,某些用户(基于软件开发功能的程序员)希望您的代码在某些方面保持不变。所以你想修改代码,但他们希望代码保持不变。这就引出了面向对象设计中的一个基本问题:“如何区分变化的事物和不变化的事物”。这个问题对图书馆尤为重要。类库的使用者必须依赖于他们使用的类库的部分,并且知道如果他们使用新版本的类库,他们不需要重写代码。另一方面,类库的开发者必须有修改和完善类库的自由,并保证客户端代码不会受到这些变化的影响。为了解决这个问题,Java为类库开发人员提供了访问修饰符(accessspecifiers),以表明哪些对客户端程序员可用,哪些不可用。访问控制权限的级别从“最高特权”到“最低特权”为:公共、受保护、包访问(无关键字)和私有。但是,类库组件的概念和类库组件的访问控制还不完善。剩下的问题是如何将库组件捆绑到一个有凝聚力的库单元中。在Java中,它由package关键字控制。该类是在同一个包中还是在不同的包中都会影响访问修饰符。包的概念包包含一组组织在单个命名空间下的类。创建包时,包名暗示了目录结构。包必须位于包名指定的目录中,必须在以CLASSPATH开头的目录中查询。如果使用package语句,它必须是文件中除了注释之外的第一行代码。当你写:packagecom.fs;您在名为com.fs的保护伞下的编译单元中声明了一个公共类名。任何想要使用此名称的人都必须指定完整的类名或使用import关键字来导入com.fs。(注意Java包名按照约定都是小写的,连中间的单词也需要小写,区别于驼峰式)比如假设文件名是MyClass.java,表示只能有一个publicclassinthefile,andtheclassnamemustbeMyClass(与文件名大小写相同):packagecom.fs;publicclassMyClass{//...}如果有人想在其中使用MyClass或其他公共类com.fs,他们必须使用关键字import才能使用com.fs中的名称。导入com.fs.*;publicclassImportedMyClass{publicstaticvoidmain(String[]args){MyClassm=newMyClass();}}另一种选择是使用全名:publicclassImportedMyClass{publicstaticvoidmain(String[]args){com.fs.MyClassm=newMyClass();}}访问修饰符Java访问修饰符public、protected和private位于定义的类名、属性名和方法名之前。每个访问修饰符只控制它修改的对象。访问权限类包子类其他包publicYYYYprotectedYYY/NNdefaultYYNNprivateYNNN轻松访问对方。公开成员。然后无论谁,无论身在何处,都可以访问它。为成员提供默认的包访问权限,无需任何访问修饰符,然后将其他类放在同一个包中。这样,其他类就可以访问该成员。继承类可以访问公共成员和受保护成员(但不能访问私有成员)。只有当这两个类在同一个包中时,它才可以访问包中的成员访问权限。但是暂时不用担心继承和保护。“get/set”方法读取和更改值。public:接口访问当使用关键字public时,表示紧接在public之后声明的成员对所有人都可用。默认情况下,此目录中的所有其他文件都具有包访问权限。protected:继承访问protected关键字处理继承的概念,即可以利用现有的类——我们称它为基类,然后可以在不触及现有类的情况下将新成员添加到现有类中。我们还可以更改类中现有成员的行为。为了从一个类继承,你需要声明新类扩展一个现有的类,像这样:包含成员成员。同一个包中的其他类不能访问私有成员,所以这无异于自我隔离。另一方面,可以让很多人合作创建一个包。有了private,你就可以随意修改那个被修改的成员,而不用担心影响同一个包下的其他类。类访问访问修饰符也可用于确定类库中的哪些类可供类库的使用者使用。如果您希望客户程序员可以使用一个类,请将关键字public应用于整个类定义。这甚至可以控制客户程序员是否可以创建该类的对象。为了控制一个类的访问权限,修饰符必须出现在关键字class之前:publicclassPerson{}注意类既不能是private的(这样除了自己之外没有其他类可以访问它),也不能是protected的。所以类访问只有两个选项:包访问或公共。为了防止类被外界访问,可以将所有的构造函数都声明为private,这样只有自己才能创建对象。总结控制成员访问有两个原因。第一个原因是防止用户接触他们不应该接触的部分,这些部分对于类的内部结构是必需的,但不是客户端程序员所需的接口的一部分。所以将方法和属性声明为私有是对客户程序员的一种服务,让他们清楚地看到什么是重要的,什么是可以忽略的。这简化了他们对类的理解。第二个也是最重要的原因是允许库设计者改变类的内部工作而不用担心影响客户端程序员。就像最初以某种方式创建一个类,然后发现改变代码的结构可以大大加快速度。如果接口和实现明确分开并受到保护,您就可以实现这一点,而无需强迫客户程序员重写代码。访问控制确保客户程序员不能依赖类底层实现的任何部分。最后一篇为初学者提供学习指南,对从业者有参考价值。我坚信编码员也有能力产生洞察力。扫描下方二维码关注、学习、交流!
