页首Html代码

07-Java封装

7.1 封装介绍

封装(encapsulation)就是把抽象出来的数据(属性)和对数据的操作(方法)封装在一起,数据被保护在内部,程序的其他部分只有通过被授权的操作(方法),才能对数据进行操作。

比如电视就是典型的封装,我们开关电视只需要按遥控器的开关按钮就行了,我们并不需要直到内部电路的细节。

封装的好处

  1. 隐藏实现的细节,方法直接调用传入参数就行。
  2. 可以对数据进行验证,保证安全合理。

7.2 封装的实现步骤

  1. 将属性及逆行私有化private,不能直接修改属性。
  2. 提供一个公共的(public)set方法,用于对熟悉那个判断并赋值:
public void setxxx(类型 参数名) {
  //加入数据验证的业务逻辑
  属性 = 参数名;
}
  1. 提供一个公共的(public)get方法,用于获取属性的值:
public 数据类型 getxxx() {//权限判断
  return xx;
}

7.3 入门案例

package com.edu.Encap;

public class Encap01 {
    public static void main(String[] args) {
        Person person = new Person();
        person.setName("jack");
        person.setAge(30);
        person.setSalary(30000);
        System.out.println(person.info());
    }
}
/*
不能随便查看个人的年龄,工资等隐私,并对设置的年龄进行验证,
年龄合理就设置,否则给默认年龄,必须在1-120之间,工资不能
直接查看,name的长度在2-6个字符之间
*/
class Person {
    public String name;//名字公开
    private int age;//age私有化
    private double salary;//工资私有化

    public String getName() {
        return name;
    }

    public void setName(String name) {
        if (name.length() >= 2 && name.length() <=6) {
            this.name = name;
        }else {
            System.out.println("名字长度为2-6个字符");
        }

    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        //判断年龄是否合法
        if (age >= 1 && age <= 120) {//年龄是否合法
            this.age = age;
        }else {
            System.out.println("年龄输入范围错误,1-120");
            this.age = 18;//给一个默认年龄
        }

    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }
    //写一个方法,返回属性信息
    public String info() {
        return "信息为 name = " + name + "age=" + age + "薪水=" + salary;
    }
}

7.4 构造器和setxxx结合

package com.edu.Encap;

public class Encap01 {
    public static void main(String[] args) {
        Person person = new Person();
        person.setName("jack");
        person.setAge(30);
        person.setSalary(30000);
        System.out.println(person.info());
        //直接使用构造器访问
        Person smith = new Person("smith",200, 30000);
        System.out.println("=====simith信息=====");
        System.out.println(smith.info());
    }
}
/*
不能随便查看个人的年龄,工资等隐私,并对设置的年龄进行验证,
年龄合理就设置,否则给默认年龄,必须在1-120之间,工资不能
直接查看,name的长度在2-6个字符之间
*/
class Person {
    public String name;//名字公开
    private int age;//age私有化
    private double salary;//工资私有化

    public Person() {//创建无参构造器

    }

    public Person(String name, int age, double salary) {//创建有参构造器
//        this.name = name;
//        this.age = age;
//        this.salary = salary;
        //如果我们不配置的话,默认是不能判断控制的所以我们需要在构造器下如下设置
          setName(name);
          setAge(age);
          setSalary(salary);
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        if (name.length() >= 2 && name.length() <=6) {
            this.name = name;
        }else {
            System.out.println("名字长度为2-6个字符");
        }

    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        //判断年龄是否合法
        if (age >= 1 && age <= 120) {//年龄是否合法
            this.age = age;
        }else {
            System.out.println("年龄输入范围错误,1-120");
            this.age = 18;//给一个默认年龄
        }

    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }
    //写一个方法,返回属性信息
    public String info() {
        return "信息为 name = " + name + "age=" + age + "薪水=" + salary;
    }
}

7.5 封装课后练习

package com.edu.Encap;
/*
* 定义两个类:Account和AccountTest
* 1. Account类要求具有属性:姓名(长度2-4位),余额必须>20,
* 密码必须是6位,如果不满足则给出提示信息,并给默认值。
* 2. 通过setxxx的方法给Account的属性赋值
* 2. 在AccountTest中测试
* */
public class Account {
    //为了封装,将三个属性设置为private
    private String name;
    private double balance;
    private String pwd;

    public Account() {//创建无参构造器
    }

    public Account(String name, double balance, String pwd) {//创建有参构造器
        //this.name = name;
        //this.balance = balance;
        //this.pwd = pwd;
        setName(name);
        setBalance(balance);
        setPwd(pwd);
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        if (name.length() >= 2 && name.length() <= 6) {
            this.name = name;
        }else{
            System.out.println("用户名2-6字符");
            this.name = "无名";
        }
    }

    public double getBalance() {
        return balance;
    }

    public void setBalance(double balance) {
        if (balance > 20) {
            this.balance = balance;
        }else{
            System.out.println("余额不能小于20");
            this.balance = 0;
        }
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        if(pwd.length() >= 6){
            this.pwd = pwd;
        }else{
            System.out.println("密码位数不对");
            this.pwd = "000000";
        }
    }
    //显示账号信息
    public void ShowInfo(){
        System.out.println("name = " + name + "balance=" + balance + "pwd = " + pwd);
    }
}

posted @   与或非丶  阅读(32)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!
点击右上角即可分享
微信分享提示

目录导航