封装的简单例子

面向对象三大特征之简介封装

举个例子

  • 引入
package com.u1.day0130;

/**
 * 封装的演示。
 * 
 * @author Feng 2018年1月30日下午2:37:59
 */
public class Demo02 {
    /**
     * 用人的属性作为成员变量。
     */
    public String name;// 名字
    public int age;// 年龄
    public String sex;// 性别

    public Demo02() {// 无参构造方法
        judg();
    }

    public Demo02(String name, int age, String sex) {// 有参构造方法
        this.name = name;
        this.age = age;
        this.sex = sex;
        judg();
    }

    void demo03() {
            /**
             * 在这里对类Demo02的成员变量赋值
             */
            // 很显然名字的字数太多了,不符合常理。
            name = "日出东方唯我不败东方不败";
            // 很显然age 也不符合常规。
            age = 10000;
            age = -10000;
            // 性别居然可以是“不知道”。
            sex = "不知道";

            /**
             * 那么问题来了,这种非法的年龄,性别,名字 是没有任何限定的。 那怎么去避免呢?一般我们都可以加上判断语句。
             */
            // 加上判断
            if (age < 0 || age > 100) {// 在正常的范围内。
                // 可以看出,这样确实可以达到效果,但是代码的冗余太大,每次赋值都要判断一次。
                age = 25;
            }
            /**
             * 那么还有其他的方法吗? 说到方法,我们可以在Demo02中加上一个专门的方法。
             * 如果不在构造方法中添加的话,还是会出错。
             */
        }
        public static void main(String[] args) {
            Demo02 d2 = new Demo02("ixnxi",-12,"男");
            System.out.println(d2.age);//得到的是负值的年龄。
            /**
             * 这时,需要把方法加到构造方法中去调用。
             * 如此,还是很麻烦,有没有什么方式能从根本上解决这个问题呢?
             * 有人说,不就是把成员变量改了吗,你不让他改就行了,主要就是限制他呀。
             * 然后就有了属性的私有化,不让其他人去碰。只能自己去动它。
             * 但是这样也不好,这样虽然可以杜绝那种胡乱改变量的现象,但是,这是根本就改不了了好吗!
             * 所以就出现了,给私有成员变量赋值的专门的方法,和取出的专门的方法,就是set和get方法。
             * 所以就有了现在的私有属性,公共方法。
             */

        }
        public void judg() {//需要判断的时候,就可以直接调用这个方法。
            if(age < 0|| age >100) {
                age = 25;
            }
        }



}
  • 稍微深入一下
package com.u1.day0130;

import com.sun.org.apache.xerces.internal.util.SynchronizedSymbolTable;

/**
 * 一个钱包!
 * @author Feng
 * 2018年1月30日下午3:10:00
 */
public class MoneyPackage {
    /**
     * 分析:
     * 钱包的话,能想到什么?
     * 这里只看俩属性。
     * 钱包肯定是有主人的,所以有个能看到的能接触到的user
     * 钱包肯定要装钱,装多少,其他人不能知道,所以只对钱数进行封装。
     */
    private int money;//对钱数进行封装
    String user;//钱包的主人,不封装。
    //主人对外,提供了借钱的方法,还钱的方法
    public int getMoney() {//借到钱
        //这个题只对set方法进行控制,不对get控制,若读者有意愿,可以自己加上。
            return money;
    }
    public void setMoney(int money) {//去借钱
        if(money >=0 && money <=1000) {//加上限定。除了可以对set方法控制,还能对get方法控制
            this.money = money;
        }else {
            System.out.println("没那么多钱啦~");
        }

    }


}

  • 再创建一个宾客类,去向主人借钱
package com.u1.day0130;
/**
 * 宾客类,可以向钱包的主人借钱,并还钱。
 * @author Feng
 * 2018年1月30日下午3:14:50
 */
public class Guest {
    public static void main(String[] args) {
        MoneyPackage mp = new MoneyPackage();//声明并实例化。

        mp.setMoney(10);//去借10快钱。必须通过mp这个钱包的对象。不能直接得到。
        mp.setMoney(10000);//去借10000,应该是不够的。
        System.out.println(mp.getMoney());//借到了10块钱。若10000的话,会不同。

    }
}

这些就是我对封装的一些理解心得啦~

小提示:我人太懒了,一些解释性的东西直接写到注释里了。

©️2020 CSDN 皮肤主题: 终极编程指南 设计师:CSDN官方博客 返回首页