面向对象之 封装 学习笔记

面向对象三大特征:封装、继承、多态

封装(encapsulation)

类里有属性和方法 封装
隐藏实现细节,实现对数据的验证,保证数据安全合理

封装实现步骤

  1. 将属性进行私有化【不能直接修改属性】
  2. 提供一个公共的(public)set方法,用于对属性判断并赋值
  3. 提供一个公共的get方法,用于获取属性的值。
public void setXXX(类型 参数名){
	//数据验证的数据逻辑
	属性 = 参数名;
}
public 数据类型 getXXX(){
	//权限判断
	return xx;
}

具体案例

package com.two.encap;

public class Encapsulation01 {
    /*
    不能随便查看年龄、工资,并对年龄进行合理验证。
    年龄合理就设置,否则就默认年龄,必须在1-120,name长度在2-6字符之间
     */
    public static void main(String[] args) {
        Person person = new Person();
        person.setName("Jackrrr");
        person.setAge(180);
        person.setSalary(10000);
        System.out.println(person.info());
        System.out.println(person.getSalary());
        Person smith = new Person("smith", 2000, 50000);
        System.out.println("===========smith 的信息 ======");
        System.out.println(smith.info());

    }
}

class Person {
    public String name;
    private int age; //私有化
    private double salary;

    //构造器
    public Person() {
    }
    //三个属性的构造器
    public Person(String name, int age, double salary) {
//        this.name = name;
//        this.age = age;
//        this.salary = salary;
        //如果用默认的,无法有防控机制。
        // 将set方法写在构造器中,就依然能够验证数据
        setSalary(salary);
        setName(name);
        setAge(age);
    }

    //根据要求完善代码
    public void setName(String name) {
        // 增加业务逻辑
        if (name.length() >= 2 && name.length() <= 6){
            this.name = name;
        }else{
            this.name = "Noname";
            System.out.println("请输入合法名字长度,长度为2-6个字符");
        }

    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        if (age >= 1 && age <= 120) {
            this.age = age;
        } else {
            System.out.println("年龄需要在1-120内,给默认年龄0");
            this.age = 0;
        }
    }

    public double getSalary() {
        // 增加对当前对象的权限判断
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }

    //写一个方法返回属性信息
    public String info() {
        return "信息为 name = " + name + " age = " + age + " salary = " + salary;
    }
}


practice 创建程序,其中定义两个类 Account和AccountTest类

  1. Account 类要求具有属性:姓名(长度为2-4),余额(>20),密码(必须6位),如果条件不满足,给出提示信息,并给默认值
  2. 通过setXxx方法给Account属性赋值
  3. 在AccountTest类中测试
package com.two.encap;

public class AccountTest {
    public static void main(String[] args) {
        Account account = new Account();
        account.setName("sjjjdsa");
        account.setPasswd("1234567");
        account.setSalary(19);
        System.out.println(account.info());
    }
}

class Account {
    public String name;
    private double salary;
    private String passwd;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        if (name.length() >= 2 && name.length() <= 4) {
            this.name = name;
        } else {
            this.name = "no";
            System.out.println("姓名有误,输入长度应为2-4");
        }

    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        if (salary > 20) {
            this.salary = salary;
        } else {
            System.out.println("薪水有误,应大于20");
            this.salary = -1;
        }

    }

    public String getPasswd() {
        return passwd;
    }

    public void setPasswd(String passwd) {
        if (passwd.length() == 6) {
            this.passwd = passwd;
        }else{
            this.passwd = "000000";
            System.out.println("密码设置错误,应为六位");
        }

    }

    // 输出信息
    public String info() {
        return "信息为 name = " + name + " salary = " + salary + " passwd = " + passwd;
    }
}

老师把三个属性都设置成了private属性==、

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值