类的属性的处理:
1. 一般使用private访问权限。
2. 提供相应的get/set方法来访问相关属性,这些方法通常是public修饰的,以提供对属性的赋值与读取操作(注意:boolean变量的get方法是is开头!)。
3. 一些只用于本类的辅助性方法可以用private修饰,希望其他类调用的方法用public修饰。
【示例】JavaBean的封装实例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
public class Person {
// 属性一般使用private修饰
private String name;
private int age;
private boolean flag;
// 为属性提供public修饰的set/get方法
public String getName() {
return name;
}
public void setName(String name) {
this .name = name;
}
public int getAge() {
return age;
}
public void setAge( int age) {
this .age = age;
}
public boolean isFlag() { // 注意:boolean类型的属性get方法是is开头的
return flag;
}
public void setFlag( boolean flag) {
this .flag = flag;
}
} |
下面我们使用封装来解决一下之前提到的年龄非法赋值的问题。
【示例】封装的使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
class Person {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this .name = name;
// this.age = age;//构造方法中不能直接赋值,应该调用setAge方法
setAge(age);
}
public void setName(String name) {
this .name = name;
}
public String getName() {
return name;
}
public void setAge( int age) {
//在赋值之前先判断年龄是否合法
if (age > 130 || age < 0 ) {
this .age = 18 ; //不合法赋默认值18
} else {
this .age = age; //合法才能赋值给属性age
}
}
public int getAge() {
return age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]" ;
}
} public class Test2 {
public static void main(String[] args) {
Person p1 = new Person();
//p1.name = "小红"; //编译错误
//p1.age = -45; //编译错误
p1.setName( "小红" );
p1.setAge(- 45 );
System.out.println(p1);
Person p2 = new Person( "小白" , 300 );
System.out.println(p2);
}
} |