• 目录

信息的隐藏与封装

阅读量: 142 编辑

信息的隐藏与封装

信息的隐藏于封装是通过 <modifiers>来实现的

比如,下方代码就是对类的访问控制,表示对类的信息隐藏

[<modifiers>] class <class_name>
  • <modifiers> 有四种形式:public default protected private 来实现的

  • default 表示不写,比如 class Person也是可以的

一、信息的隐藏

  • 隐藏:指的是对象的一种保护机制,使得它的属性或方法不被外部的程序直接访问

  • 因为,使用者对类内部定义的数据(属性)的直接操作,可能会导致数据的错误、混乱或安全性问题

  • 就像一个人的名字是可以公开(public)的,但是身份证信息就需要保密(private)

二、信息的封装

  • 封装指的是将对象的状态信息(属性)和行为(函数)捆绑为一个逻辑单元的机制。

  • Java 中通过将数据封装、声明为私有的(private),再提供一个或多个公开的(public)方法实现对该属性的操作,以实现下述目的:

    • 隐藏一个类的实现细节

    • 防止对封装数据的未经授权的访问

    • 有利于保证数据的完整性,增强代码的可维护性

三、如何实现封装和隐藏

  • 修饰符<modifiers>publicprotecteddefaultprivate

  • 通过点语法和this关键字来使用

  • 可以通过 setter 和 getter 方法来控制我们隐藏的属性想暴露的数据

四、修饰符的权限

作用域 当前类 同一包内 子孙类 其他包
public
protected ×
default × ×
private × × ×

五、代码实战

代码的详细解读,可以参考视频教程

Person.java

package com.qicong.zj.c06;

/**
 * User: 祁大聪
 */
public class Person {

    public String name;               // public
    int age;                                 // default的
    private int money=1000000; // 私有,保护的,外部访问不了
    private int grades;                // private 

    public void printPersonInfo(){
        this.name = "三妮";
        this.age = 100;
    }

    //封装money对应的开放函数,通过密码才能访问
    protected int getPersonMoney(String password){
        if(password == "111"){
            return this.money;
        }else{
            return 0;
        }
    }

    public static void main(String[] args) {
        Person p = new Person();
        p.name = "三妮";
        p.age = 100;
        p.money = 10000;//同一个函数内可以使用money
        p.grades = 100;
    }


    //setter & getter方法
    public String getName() {
        return name;
    }

    public void setName(String name) {
        //逻辑控制
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getMoney() {
        return money;
    }

    public void setMoney(int money) {
        this.money = money;
    }

    public int getGrades() {
        return grades;
    }

    public void setGrades(int grades) {
        this.grades = grades;
    }
}

测试类,调用 Person.java 中的成员

PersonTest.java


// 和 Person.java 在同一个package(包)中
package com.qicong.zj.c06;

/**
 * User: 祁大聪,通过PersonTest理解一下访问权限
 */
public class PersonTest {

    public static void main(String[] args) {
        Person p = new Person();
        p.age = 100;
//        p.money = 1000;                                  //这个是不可以直接访问的,因为是私有的
        int money = p.getPersonMoney("112");  //可以通过开放函数访问私有数据
        System.out.println("money = " + money);
    }
}

  • 目录