如果用构造器的方法的话这个不是可以绕过数据的验证吗
比如
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);
}
这样就可以了