package com.encupsulation;
//不能随便查看人的年龄,工资等隐私,并对设置的年龄进行合理的验证。
// 年龄合理就设置,否则给默认 年龄, 必须在 1-120,
// 年龄, 工资不能直接查看 , name 的长度在 2-6 字符 之间
public class encup01 {
public static void main(String[] args) {
Person person = new Person();
person.setName("to飞洒发、是德国省的双飞人");
person.setAge(444);
person.setSalary(5000.55);
System.out.println(person.info());
}
}
class Person{
//属性私有化
public String name;
private int age;
private double salary;
//公共的set方法,对象属性判断并且赋值
public void setName(String name){
//加入判断条件
if(name.length()>2 && name.length()<6) {
this.name = name;
}else{
System.out.println("您的名字长度不行");
this.name = "错误";
}
}
//公共的get方法,获取属性的值
public String GetName(){
return name;
}
//快捷键(getter and setter)
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+"薪水为"+salary+"年龄为"+age;
}
}
封装之后里面的属性就不能想改就改,而且还可以加一些业务逻辑(对于某个属性的要求)
建了个类,里面有一些私有化属性,setxxx就相当于对于属性的设置,getxxx就相当于得到我们设置过的属性
将构造器与setxxx相结合:
如果我们人为的设置一个构造器,那么在创建对象的时候放在括号里的属性就直接给了对象的属性,这样的话我们之前写的setxx方法就失效了(相当于被绕了过去),这样的话setxxx里面我们给属性设置的业务逻辑就没用了——————>可以把setxxx写到构造器里
//构造器
public Person(String name, int age, double salary) {
// this.name = name;
// this.age = age;
// this.salary = salary;
setName(name);
setSalary(salary);
setAge(age);
}