`
jiagou
  • 浏览: 2530603 次
文章分类
社区版块
存档分类
最新评论

java 第七课 隐藏和封装

 
阅读更多
¯理解封装
封装(Encapsulation)是面向对象三大特征之一(封装、继承、多态),它指的是将对象的状态信息隐藏在内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来实现对内部信息的操作和访问。
对一个类或对象实现良好的封装,可以实现以下目的:
µ隐藏类的实现细节。
µ让使用者只能通过事先预定的方法访问数据,从而可以在该方法里加入控制逻辑,限制对属性不合理访问。
µ可进行数据检查,从而有利于保证对象信息的完整性。
µ便于修改,提高代码的可维护性。
为了实现良好的封装,需要从两个方面考虑:
µ将对象的属性和实现细节隐藏起来,不允许外部直接访问。
µ把方法暴露出来,让方法来操作或访问这些属性。
隐藏和封装
使用访问控制符




注意:对于类而言,可以使用public和默认访问控制符修饰,使用public修饰的类可以被所有类使用,不使用任何访问控制符修饰的类只能被同一个包中的所有类访问。
定义Person类,实现良好的封装。
public class Person{
private String name;
private int age;
public void setName(String name) {
//要求用户名必须在2~6位之间
if (name.length() > 6 || name.length() < 2){
System.out.println("您设置的人名不符合要求");
}else{
this.name = name;
}
}

public String getName(){
return this.name;
}
public void setAge(int age){
//要求用户年龄必须在0~100之间
if (age > 100 || age < 0){
System.out.println("您设置的年龄不合法");
}else{
this.age = age;
}
}
public int getAge(){
return this.age;
}
}
注意:属性的getter方法和setter方法有重要的意义,命名应遵循的原则:将原属性名的首字母大写,并在前面分别增加set和get动词,就变成setter和getter方法名 。
访问控制符的使用总结:
µ类中绝大部分属性应该使用private修饰,除了一些static修饰的、类似全局变量的属性,才考虑使用public修饰。
µ有些方法只是用于辅助实现该类的其他方法,这些方法被称为工具方法,也应用private修饰。
µ如果某个类主要用作其他类的父类,该类里包含的大部分方法可能仅希望被其子类重写,而不想被外界直接调用,则应该使用protected修饰这些方法。
µ希望暴露出来给其他类自由调用的方法使用public修饰。
µ顶级类通常都希望被其他类自由使用,所以大部分顶级类都使用public修饰。
¯package和import
µ包:Java中,包(package)是一组相关的类和接口的集合。Java编译器将包与文件系统的目录一一对应起来。
µ
µ
优点:
ü避免大量类的重名冲突,扩大名字空间。
ü包体现了封装机制
µ包的创建:如果希望把一个类放在指定的包结构下,应该在Java源程序的第一个非注释行放如下格式的代码:package packageName[.packageName[…]];
µ
例4.18 包的创建。
package hbsi;
public class HelloWorld{
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
注意:
ü包名是有效地标识符即可,但从可读性规范角度来看,包名应该全部由小写字母组成。
ü为了避免不同公司之间类名的重复,Sun建议使用单位Internet域名倒写来作为包名,
üpackage语句必须作为源文件的第一句非注释性语句,一个源文件只能指定一个包,该源文件中可以定义多个类,则这些类将全部位于该包下。
ü如果没有显示指定package语句,则处于无名包下。实际企业开发中,通常不会把类定义在无名包下。
µ包中类的使用
如果要使用包中的类,可以有两种方法:
ü引用包中的类(使用类的全限定名称)myPackage.mySubPackage.Book bookObj=new myPackage.mySubPackage.Book();
üimport语句引入包中的类
格式:import 包名.类名;
或 import 包名.*; //“*”号表示所有类
例如: import myPackage.mySubPackage.*;
Book bookObj=new Book();
注意:在引入具有层次结构的包时,“*”号仅仅表示该包中的所有类,如果该包中还有子包,那么子包中的类时不被包括的。

µ比较两种方法的优缺点:
ü适用包名作前缀的方法使程序清晰,很容易就看出所使用的类位于哪个包中;而引入包的方法要知道某个类所在的包比较困难.
ü使用引入包的方法会带来名字冲突的问题,而使用包名作前缀不会存在这样的问题.
ü使用包名作前缀书写程序时比较麻烦.
µ静态导入
JDK1.5以后更是增加了一种静态导入的语法,它用于导入指定类的某个静态属性值或全部静态属性值。
ü导入指定类单个静态属性
import static 父包.子包…类名.静态属性名;
例:import static java.lang.System.out;
ü导入指定类全部静态属性
import static 父包.子包…类名.*;
例:import static java.lang.Math.*;


分享到:
评论

相关推荐

    09_Java面向对象_第1天(类、封装)_讲义

    09_Java面向对象_第1天(类、封装)_讲义

    Java开发技术大全(500个源代码).

    第7章 示例描述:本章学习Java的输入和输出。 CopyFile.java 文件复制实例 dir.java 显示目录下的所有文件和目录 encrypt.java 文件加密 FileList.java 自己实现的一个文件名称枚举类 MyDataIO.java 数据输入...

    Thinking in Java 中文第四版+习题答案

    第7章 多形性 7.1 上溯造型 7.1.1 为什么要上溯造型 7.2 深入理解 7.2.1 方法调用的绑定 7.2.2 产生正确的行为 7.2.3 扩展性 7.3 覆盖与过载 7.4 抽象类和方法 7.5 接口 7.5.1 Java的“多重继承” 7.5.2 通过继承...

    JAVA基础课程讲义

    第七章 容器(Collection) 136 容器的作用和概览 136 容器中的接口层次结构 136 Collection接口 137 LIST接口 137 SET接口 138 Map接口 138 Iterator接口 139 遍历集合 140 Collections工具类 141 Comparable接口 141...

    疯狂JAVA讲义

    第7章 Java集合 240 7.1 Java集合概述 241 7.2 Collection和Iterator接口 243 7.2.1 使用Iterator接口遍历集合元素 244 7.2.2 使用foreach循环遍历集合元素 246 7.3 Set接口 247 7.3.1 HashSet类 247 学生...

    Java完美编程(第3版).pdf

     7.2 封装和继承   7.3 继承编程   小结   自测题参考答案   编程项目 第8章 多态性和抽象类 第9章 异常处理 第10章 文件i/o 第11章 递归 第12章 uml和模式 第13章 借口和内部类 第14章 泛型和...

    java 编程入门思考

    第7章 多形性 7.1 上溯造型 7.1.1 为什么要上溯造型 7.2 深入理解 7.2.1 方法调用的绑定 7.2.2 产生正确的行为 7.2.3 扩展性 7.3 覆盖与过载 7.4 抽象类和方法 7.5 接口 7.5.1 Java的“多重继承” 7.5.2 通过继承...

    Java初学者入门教学

    第7章 多形性 7.1 上溯造型 7.1.1 为什么要上溯造型 7.2 深入理解 7.2.1 方法调用的绑定 7.2.2 产生正确的行为 7.2.3 扩展性 7.3 覆盖与过载 7.4 抽象类和方法 7.5 接口 7.5.1 Java的“多重继承” 7.5.2 通过继承...

    java联想(中文)

    第7章 多形性 7.1 上溯造型 7.1.1 为什么要上溯造型 7.2 深入理解 7.2.1 方法调用的绑定 7.2.2 产生正确的行为 7.2.3 扩展性 7.3 覆盖与过载 7.4 抽象类和方法 7.5 接口 7.5.1 Java的“多重继承” 7.5.2 通过继承...

    《java面向对象程序设计-继承和多态》教案.doc

    第四章 面向对象的概念和 Java 实现-2 回顾 类是具有相同属性和行为的一组对象的 集合 , 对象是类的实例 封装是隐藏对象实现细节的过程,以便不让用户看到实现的细节 类可用Class 来定义,类的变量和方法可被该类的...

    JAVA语言程序设计课程教学大纲.doc

    一、课程基本信息 课程代码: 课程名称:JAVA语言程序设计 课程性质:专业课 课程类型:必修课 计划学时:72 计划学分:4 适用专业:计算机软件 先修课程:计算机基础 编制时间:2006-7-6 二、课程性质和任务 ...

    Java语言基础下载

    第七章:类的高级特征 103 学习目标 103 static关键字 104 final关键字 106 内部类 106 实例分析 110 抽象类,接口 115 内容总结 120 独立实践 121 第八章:异常 122 学习目标 122 异常的概念 123 异常的分类 123 ...

    java初学者必看

    第7章 对象与类 7.1 面向对象程序设计 7.1.1 面向对象程序设计的概述 7.1.2 面向对象程序设计的特点 7.1.3 对象与类的关系 7.2 定义类 7.2.1 MasterCard类的实现 7.2.2 MasterCard类的使用 7.2.3 访问控制 ...

    JAVA_Thinking in Java

    第7章 多形性 7.1 上溯造型 7.1.1 为什么要上溯造型 7.2 深入理解 7.2.1 方法调用的绑定 7.2.2 产生正确的行为 7.2.3 扩展性 7.3 覆盖与过载 7.4 抽象类和方法 7.5 接口 7.5.1 Java的“多重继承” 7.5.2 通过继承...

    Thinking in Java简体中文(全)

    第7章 多形性 7.1 上溯造型 7.1.1 为什么要上溯造型 7.2 深入理解 7.2.1 方法调用的绑定 7.2.2 产生正确的行为 7.2.3 扩展性 7.3 覆盖与过载 7.4 抽象类和方法 7.5 接口 7.5.1 Java的“多重继承” 7.5.2 通过继承...

    Java JDK实例宝典

    4 使用异常的技巧与原则 第7章 IO——输入输出流 7. 1 获取文件的属性信息 7. 2 列出指定目录下的文件 7. 3 创建文件和目录 7. 4 删除文件和目录 7. 5 移动文件和目录 7. 6 复制文件和...

    Java 语言基础 —— 非常符合中国人习惯的Java基础教程手册

    这三个概念是:封装、继承性和多态性。除此以外,还需了解对象、 类、消息、接口、及抽象等概念。 2.2.1 对象 现实世界中的对象具两个特征:状态和行为。例如:自行车有状态(传动装置、步度、 两个车轮和...

    JAVA_Thinking in Java(中文版 由yyc,spirit整理).chm

    第7章 多形性 7.1 上溯造型 7.1.1 为什么要上溯造型 7.2 深入理解 7.2.1 方法调用的绑定 7.2.2 产生正确的行为 7.2.3 扩展性 7.3 覆盖与过载 7.4 抽象类和方法 7.5 接口 7.5.1 Java的“多重继承” 7.5.2 通过继承...

    Think in Java(中文版)chm格式

    第7章 多形性 7.1 上溯造型 7.1.1 为什么要上溯造型 7.2 深入理解 7.2.1 方法调用的绑定 7.2.2 产生正确的行为 7.2.3 扩展性 7.3 覆盖与过载 7.4 抽象类和方法 7.5 接口 7.5.1 Java的“多重继承” 7.5.2 ...

Global site tag (gtag.js) - Google Analytics