- 将构造器和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();
}
}