需求:
学生类:
姓名和年龄
使用StudentDemo类测试这个学生类
按照上面这个需求实现,发现一个问题,如果给学生的年龄赋值为一个非法数据,这个数据还被输出了!
上面这个问题如何解决:
1)如果年龄<0或者年龄 > 150 ,年龄是一个非法数据
不是上面的这个范围,属于正常数据,在给年龄进行赋值
将这个功能定义在哪里? ---->定义具体类中
虽然说定义该功能,决绝非法数据,但是不一定使用这个功能,使用对象名.成员变量 还可以赋值非法数据
2)第二中方案
Java针对这种情况提供一个技术:封装;
将类中成员变量私有化(private),对外提供公共的访问方法(权限足够大)
私有化的成员变量:只能在本类中访问,外界不能访问!
class Student{
String name;
private int age;
//成员方法
public void show(){
System.out.println("姓名:"+name);
System.out.println("年龄:"+age);
}
//在提供一个方法
public void setAge(int a){
if(a<0 || a>150){
System.out.println("当前年龄是个非法数据");
}else{
age=a;
}
}
}
class StudentDemo{
public static void main(String[] args){
//测试这个学生类
//创建一个学生类
Student s=new Student();
s.show();
s.name="张三";
//s.age=20;
s.show();
System.out.println("-----------");
/*Student s2=new Student();
s2.name="李三";
s2.age=-20;//非法数据
s2.show();*/
//改进之后:测试
Student S2=new Student();
s2.name="李三";
s2.setAge(-20);
s2.show();
System.out.println("-----------");
Student S3=new Student();
s3.name="李三";
//s3.age=-50;
s3.show();
}
}