283-封装与构造器

文章讨论了如何通过在构造器中直接调用set方法进行数据验证,从而可能绕过通常的输入限制。作者提出了一种方法,即在构造函数内部进行年龄和姓名的验证,以保持封装原则。
摘要由CSDN通过智能技术生成

如果用构造器的方法的话这个不是可以绕过数据的验证吗

比如

package com.humouren.encap;

import java.util.Scanner;

public class Encapsulation01 {
    public static void main(String[] args) {
//.....

        Person xiaoming = new Person("小明",12345);
        System.out.println(xiaoming.info());
    }
}
class Person{
    public String name;//这个是名字,公开
    private  int age;//年龄私有化
    private double salary;//工资私有化
    public Person() {
    }

    public Person(String name, int age){
            this.name = name;
            this.age = age;
        }


    public String getName() {
        return name;
    }

    public void setName(String name) {
        if (name.length()>=2 && name.length()<=5){
            this.name = name;
        }else {
            this.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,给你个默认年龄18");
            this.age = 18;
        }
    }

    public double getSalary() {
        System.out.println("请输入数据查询密码");
        Scanner myscanner = new Scanner(System.in);
        int SalaryKey= myscanner.nextInt();
        if(SalaryKey == 123){
            return salary;
        }else{
            return -1;
        }
    }

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


    }
    public String info(){//用于输出信息
        return "信息为 姓名:"+name+"  年龄:"+age+"   薪水:"+salary;
    }

}

 信息为 姓名:小明  年龄:12345   薪水:0.0

这不就绕过了限制了吗

可以将set方法写在构造器中,这样仍然可以验证

比如

    public Person(String name, int age){
            this.name = name;
            this.age = age;
            setAge(age);
            setName(name);
        }

 这样就可以了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值