封装与构造器

  • 将构造器和setXxx结合
    package com.java.encap;
    
    /*请大家看一个小程序(encapsulation01.java)不能随便查看人的年龄,工资等隐私,
    并对设置年龄进行合理的验证。年纪合理就设置,否则给默认
    年龄必须在1-120,年龄,工资不能直接查看,name 的长度在2-6字符之间*/
    public class Encapsulation01 {
        public static void main(String[] args) {
            Person p = new Person();
            p.setName("jack232");
            p.setAge(300);
            p.setSalary(3000);
            System.out.println(p.info());
            Person smith = new Person("smith", 80, 3000);
            System.out.println(smith.info());
        }
    }
    class Person{
        public String name;
        private int age;
        private double salary;
    
        //构造器alter+insert
    
        public Person() {
        }
        //三个属性构造器,如果我们自己使用构造器指定属性
    
        public Person(String name, int age, double salary) {
    //        this.name = name;
    //        this.age = age;
    //        this.salary = salary;
            //我们可以将set方法写在构造器中,这样仍然可以验证
            setName(name);//等价this.
            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("名字长度不对");
                this.name="无名人";
            }
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            if(age>=1 && age<=120){
                this.age = age;
            }else{
                System.out.println("年龄不对");
                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="+salary;
        }
    }

  •  课堂练习
    创建程序AcountTest和Acocount
    在其定义两个类:Account和AccountTest类体会Java的封装性
    1.Account类要求具有属性:姓名(长度为2位3位或4位)、余额(必须>20)、密码(必须是六位),如果不满足,则给出提示信息,并给默认值
    2.通过setXxx的方法给Account的属性赋值
    3.在AccountTest中测试
package com.java.encap;

public class Account {
    private String name;
    private double shengyu;
    private String password;

    public Account() {
    }

    public Account(String name, double shengyu, String password) {
        this.setName(name);
        this.setShengyu(shengyu);
        this.setPassword(password);
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        if(name.length()>=2 && name.length()<=4){
        this.name = name;
        }else{
            this.name="无名人";
            System.out.println("姓名输入不正确");
        }
    }

    public double getShengyu() {
        return shengyu;
    }

    public void setShengyu(double shengyu) {
        if(shengyu>=20){
        this.shengyu = shengyu;
        }else{
            System.out.println("余额不足,请重新输入");
            this.shengyu=0;
        }
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        if(password.length()==6){
        this.password = password;
        }else{
            this.password="000000";
            System.out.println("密码必须是六位");
        }
    }
    public  void showInfo(){
        System.out.println("账号信息 姓名="+name+"余额="+shengyu+"密码="+password);
    }
}

package com.java.encap;

public class AccountTest {
    public static void main(String[] args) {
        Account account = new Account();
        account.setName("jack1212");
        account.setPassword("23321132");
        account.setShengyu(3);
        account.showInfo();

    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值