zoukankan      html  css  js  c++  java
  • JavaSE基础之封装

    JavaSE基础之封装

    一、Java中的封装

      1、字面意思:

        包装;

      2、专业含义:

        面向对象的三大特征之一;

        指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来实现对内部信息的操作和访问。

    二、封装的目的

      1、隐藏类的实现细节;

      2、让使用者只能通过事先预定的方法来访问数据,从而可以在该方法里加入控制逻辑,限制对成员变量的不合理访问;

      3、可进行数据检查,从而有利于保证对象信息的完整性;

      4、便于修改,提高代码的可维护性;

    三、如何实现良好的封装

      1、将对象的成员变量和实现细节隐藏起来,不允许外部直接访问;

      2、把方法暴露出来,让方法来控制对这些成员变量进行安全的访问和操作。

    四、封装的实现

      1、Java提供3个访问控制符:

        private、protected和public;

      2、4个访问控制级别:(访问范围越来越大)

        private->default->protected->public;

      3、访问控制级别表

      同一个类 同一个包 不同包 不同包的非子类
    public 可以 可以 可以 可以
    default 可以 可以 可以  
    protected 可以 可以    
    private 可以      

     

    五、代码实现

    1、实现封装的实体类:Person.java 

     1 package cn.com.zfc.lesson04.object.encapsulation;
     2 
     3 /**
     4  * 
     5  * @title Person
     6  * @describe 实现封装:注意 age 的 setter()方法
     7  * @author 张富昌
     8  * @date 2017年4月9日下午4:24:38
     9  */
    10 public class Person {
    11 
    12     // 属性私有化
    13     private String name;
    14     private String sex;
    15     private int age;
    16 
    17     // 提供一个无参的构造器
    18     public Person() {
    19     }
    20 
    21     // 提供私有成员变量的访问方法
    22     public String getName() {
    23         return name;
    24     }
    25 
    26     public void setName(String name) {
    27         this.name = name;
    28     }
    29 
    30     public String getSex() {
    31         return sex;
    32     }
    33 
    34     public void setSex(String sex) {
    35         this.sex = sex;
    36     }
    37 
    38     public int getAge() {
    39         return age;
    40     }
    41 
    42     // 在给年龄赋值的时候,得判断当前年龄是否合法
    43     public void setAge(int age) throws RuntimeException {
    44         if (age < 0) {
    45             throw new RuntimeException("年龄不能小于 0 啊");
    46         } else if (age > 200) {
    47             throw new RuntimeException("你是老妖怪吗?都有200多岁了");
    48         } else {
    49             this.age = age;
    50         }
    51     }
    52 
    53     // 重写 toString()方法,便于测试
    54     @Override
    55     public String toString() {
    56         return "Person [name=" + name + ", sex=" + sex + ", age=" + age + "]";
    57     }
    58 
    59 }

    2、测试封装:TestEncapsulation.java

     1 package cn.com.zfc.lesson04.object.encapsulation;
     2 
     3 /**
     4  * 
     5  * @title TestEncapsulation
     6  * @describe 测试封装
     7  * @author 张富昌
     8  * @date 2017年4月9日下午4:25:40
     9  */
    10 public class TestEncapsulation {
    11     public static void main(String[] args) {
    12         // 创建 Person 对象
    13         Person person = new Person();
    14 
    15         // 给 Person 对象的 name 属性赋值
    16         person.setName("张富昌");
    17 
    18         // 获取 Person 的 name 属性值
    19         String name = person.getName();
    20         System.out.println("Person's name:" + name);
    21 
    22         // 给 Person 对象的 age 成员变量赋值,这是可以检验数据的合法性
    23         person.setAge(300);
    24     }
    25 }
    测试结果:

     

  • 相关阅读:
    WIN10解决:失败 – 检测到病毒文件下载失败问题
    Jinja2学习
    div设置百分比高度 宽度
    flask静态html
    python排序之冒泡排序
    python中的break continue之用法
    python中的break continue用法
    python格式化输出(% format用法)
    python基础数据类型
    linux下anaconda使用教程
  • 原文地址:https://www.cnblogs.com/zfc-java/p/6684161.html
Copyright © 2011-2022 走看看