7. 封装

 

1. 封装的概念

1.1 概念

封装是面向对象编程的核心思想。

将对象的属性和行为封装起来。其载体就是类,类通常对客户隐藏其实现细节,这就是封装的思想。

封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。

要访问该类的代码和数据,必须通过严格的接口控制。

封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。

适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。

1.2 封装的优点

1. 良好的封装能够减少耦合。
2. 类内部的结构可以自由修改。
3. 可以对成员变量进行更精确的控制。
4. 隐藏信息,实现细节。

1.3 如何实现封装

1.3.1 访问限制符

1.3.2 包机制

包(package)机制:提供类的多层命名空间,用于解决类的命名冲突、类文件管理等问题

格式:package 包名;

import可以向某个Java文件中导入指定层次下某个类或全部类

import应出现在package之后,类定义之前

格式:import 包名.子包名.....类名/*


2. 封装的实现

  1. 修改属性的可见性来限制对属性的访问(一般限制为private)

    例如:

    public class Atm {
        //定义balance余额,id账号id,pwd账号密码
        //并设为私有只有本类才能访问,从本类之外不能访问,这样就对信息进行了隐藏
        private double balance;
        private int id;
        private int pwd;
    }
    
  2. 对每个值属性提供对外的公共方法访问,也就是创建一堆赋取值方法,用于对私有属性访问

    例如:

    public class Atm {
        //定义balance余额,id账号id,pwd账号密码
        //并设为私有只有本类才能访问,从本类之外不能访问,这样就对信息进行了隐藏
        private double balance;
        private int id;
        private int pwd;
    
        //获取id,pwd,balance方法
        public void setAccount() {
            balance = 5000;
            id = 1024;
            pwd = 123456;
        }
    
        //查询余额方法,必须id和pwd正确才能查询,否则返回-1
        public double getBalance(int id,int pwd) {
            if (this.id == id && this.pwd == pwd) {
                return balance;
            }else{
                System.out.println("错误账号或密码!");
                return -1;
            }
        }
    
        //存钱方法,必须id和pwd正确才能存钱
        public void saveMoney(int id,int pwd,int money) {
            if (this.id == id && this.pwd == pwd) {
                balance = balance + money;
            }else{
                System.out.println("错误账号或密码!");
            }
        }
    }
    

    this解决了实例变量id,pwd和局部变量id,pwd之间的同名冲突


3. 实践和练习

编写学生类,有姓名(name),学号(id)和三门课的成绩
setData方法来设置学生信息
有方法getResult()来获取成绩
有方法getAvgResult来获取平均成绩
有方法rename来改名
有方法editResult来改成绩

 

posted @ 2017-05-23 16:58  Jeknight  阅读(296)  评论(0编辑  收藏  举报