• 030:Java类的封装


    Java 类的封装

    (转自:http://c.biancheng.net/view/940.html

    1.类的封装

           封装将类的某些信息隐藏在类内部,不允许外部程序直接访问,只能通过该类提供的方法来实现对隐藏信息的操作和访问。例如:一台计算机内部极其复杂,有主板、CPU、硬盘和内存, 而一般用户不需要了解它的内部细节,不需要知道主板的型号、CPU 主频、硬盘和内存的大小,于是计算机制造商将用机箱把计算机封装起来,对外提供了一些接口,如鼠标、键盘和显示器等,这样当用户使用计算机就非常方便。
    封装的特点:

    • 只能通过规定的方法访问数据。
    • 隐藏类的实例细节,方便修改和实现。
      实现封装的具体步骤如下:
    1. 修改属性的可见性来限制对属性的访问,一般设为 private
    2. 为每个属性创建一对赋值(setter)方法和取值(getter)方法,一般设为 public,用于属性的读写。
    3. 在赋值和取值方法中,加入属性控制语句(对属性值的合法性进行判断)。

    例 1

    下面以一个员工类的封装为例介绍封装过程。一个员工的主要属性有姓名、年龄、联系电话和家庭住址。假设员工类为 Employee,示例如下:

    1. public class Employee {
    2.     private String name; // 姓名
    3.     private int age; // 年龄
    4.     private String phone; // 联系电话
    5.     private String address; // 家庭住址
    6.     public String getName () {
    7.         return name;
    8.     }
    9. // setXxx() 方法来对其进行赋值
    10. 10.     public void setName(String name) {
    11. 11.         this.name = name;
    12. 12.     }

    13. //通过 getXxx() 方法来访问这些属性

    1. 14.     public int getAge() {
    2. 15.         return age;
    3. 16.     }
    4. 17.     public void setAge(int age) {
    5. 18.         // 对年龄进行限制
    6. 19.         if (age < 18 || age > 40) {
    7. 20.             System.out.println("年龄必须在18到40之间!");
    8. 21.             this.age = 20; // 默认年龄
    9. 22.         } else {
    10. 23.             this.age = age;
    11. 24.         }
    12. 25.     }
    13. 26.     public String getPhone() {
    14. 27.         return phone;
    15. 28.     }
    16. 29.  
    17. 30.     public void setPhone(String phone) {
    18. 31.         this.phone = phone;
    19. 32.     }
    20. 33.  
    21. 34.     public String getAddress() {
    22. 35.         return address;
    23. 36.     }
    24. 37.     public void setAddress(String address) {
    25. 38.         this.address = address;
    26. 39.     }

    40. }

    如上述代码所示,使用 private 关键字修饰属性,这就意味着除了 Employee 类本身外,其他任何类都不可以访问这些属性。但是,可以通过这些属性的 setXxx() 方法来对其进行赋值,通过 getXxx() 方法来访问这些属性。
    在 age 属性的 setAge() 方法中,首先对用户传递过来的参数 age 进行判断,如果 age 的值不在 18 到 40 之间,则将 Employee 类的 age 属性值设置为 20,否则为传递过来的参数值。
    编写测试类 EmployeeTest,在该类的 main() 方法中调用 Employee 属性的 setXxx() 方法对其相应的属性进行赋值,并调用 getXxx() 方法访问属性,代码如下:

    1. //新建测试类
    2. public class EmployeeTest {
    3.     public static void main(String[] args) {
    4.           //创建一个实例
    5.         Employee people = new Employee();
    6.           //使用setXxx()对属性进行赋值
    7.         people.setName("王丽丽");
    8.         people.setAge(35);
    9.         people.setPhone("13653835964");
    10. 10.         people.setAddress("河北省石家庄市");
    11. 11.           //使用getXxx()对属性进行访问
    12. 12.         System.out.println("姓名:" + people.getName());
    13. 13.         System.out.println("年龄:" + people.getAge());
    14. 14.         System.out.println("电话:" + people.getPhone());
    15. 15.         System.out.println("家庭住址:" + people.getAddress());
    16. 16.     }

    17. }

    运行该示例,输出结果如下:

    姓名:王丽丽

    年龄:35

    电话:13653835964

    家庭住址:河北省石家庄市

           通过封装,实现了对属性的数据访问限制,满足了年龄的条件。在属性的赋值方法中可以对属性进行限制操作,从而给类中的属性赋予合理的值,并通过取值方法获取类中属性的值(也可以直接调用类中的属性名称来获取属性值)。

    2.封装图书信息类

           了解有关封装的知识后,通过完整的例子再次实现封装。要求编写表示图书的 Book 类,实现以下需求:

    • 基本信息包括图书名称(bookName)、总页数(pagelbtalNum),其中页数不能少于 200 页,否则输出错误信息,并赋予默认值 200。
    • 为各个属性设置赋值和取值方法。
    • 具有 details() 方法,该方法在控制台输出每本图书的名称和总页数。
      编写 BookTest 测试类,为 Book 对象的属性赋予初始值,并调用 details() 方法输出详细信息。根据上面的描述添加代码,步骤如下。
      1)创建 Book 类,首先向该类添加 bookName 变量,并封装该变量。代码如下:
    1. //创建类
    2. public class Book {
    3. //添加 bookName 变量
    4.     private String bookName; // 图书名称
    5. //封装变量,使用了getXxx()访问
    6.     public String getBookName() {
    7.         return bookName;
    8.     }
    9. //封装变量,使用了setXxx()赋值
    10. 10.     public void setBookName(String bookName) {
    11. 11.         this.bookName = bookName;
    12. 12.     }

    13. }

    2)在 Book 类中添加 bookTotalNum 变量,并封装该变量,在封装的 setter 方法中判断页数的值是否小于 200。代码如下:

    1. private int bookTotalNum; // 图书总页数
    2. //封装变量
    3. public int getBookTotaiNum() {
    4.     return bookTotalNum;
    5. }
    6. //在封装的 setXxx()方法中判断页数的值是否小于 200
    7. public void setBookTotalNum(int bookTotalNum) {
    8.     if (bookTotalNum < 200) {
    9.         System.out.println(this.bookName + "这本书的页数不能少于 200 页");
    10. 10.         this.bookTotalNum = 200;
    11. 11.     } else {
    12. 12.         this.bookTotalNum = bookTotalNum;
    13. 13.     }

    14. }

    3)在 Book 类中添加公有的 details() 方法,输出图书的名称和总页数。代码如下:

    1. public void details() {
    2.     System.out.println(this.bookName + "这本书的总页数是:" + this.bookTotalNum);
    3. }

    4)创建 BookTest 测试类,在该类的 main() 方法中创建 Book 类的两个实例对象,然后分别为类中的两个属性赋值,最后调用 details() 方法输出信息。代码如下:

    1. public class BookTest {
    2.     public static void main(String[] args) {
    3.         Book book1 = new Book();
    4.         book1.setBookName("《红与黑》");
    5.         book1.setBookTotalNum(190);
    6.         book1.details();
    7.         System.out.println("************************************");
    8.         Book book2 = new Book();
    9.         book2.setBookName("《格林童话》");
    10. 10.         book2.setBookTotalNum(520);
    11. 11.         book2.details();
    12. 12.     }

    13. }

    5)执行上述代码,输出结果如下:

    《红与黑》这本书的页数不能少于 200 页

    《红与黑》这本书的总页数是:200

    ************************************

    《格林童话》这本书的总页数是:520

     

    本文来自博客园,作者:Jaoany,转载请注明原文链接:https://www.cnblogs.com/fanglijiao/p/15553901.html

  • 相关阅读:
    数据库函数(备忘)
    C语言实现统计字符个数
    用链表做一个学生管理系统
    深入理解 JSON
    从 JDK 源码角度看 Object
    eclipse + maven搭建SSM框架
    Oracle12c版64位客户端安装步骤(32位安装步骤一样)
    Oracle12C版本安装步骤
    ArcGIS破解配置及oracle文件配置
    ArcGIS_Lisence安装步骤
  • 原文地址:https://www.cnblogs.com/fanglijiao/p/15553901.html
Copyright © 2020-2023  润新知