封装
封装就是要程序员学会正确设计类对象的属性和方法,举个例题:
请对“人 在 加油站 加200块汽油” 进行面向对象设计。
显然我们可以得到两个类
人:class Person {}
加油站:class GasStation() {}
和一个方法
加油: void oiling(int volume) {}
问题来了,方法 oiling() 应该归属于人还是加油站。
答案:归属于加油站
封装原则: 对象代表什么,就要封装对应的数据,并提供数据对应的行为
class GasStation {
int volume;
public void oiling(int volume) {
System.out.println("给人加" + volume + "升汽油");
}
}
又或是“人关门”,对应两个类(人、门),而关门这个方法应该属于门自己,人只是调用门的关闭方法来实现关门。
private
类成员的权限修饰符,被private修饰的成员只能在本类中访问来保证安全性。
public class Person {
private String name;
private int age;
}
Person p1 = new Person();
p1.age = 18; //无法执行
保证了安全性,但可用性下降了,解决如下:
设计setAge方法用于设置age
getAge用于对外界提供age
既保证了数据安全性,也保证了可用性。
public class Person {
private String name;
private int age;
public void setAge(int age) {
if (age >= 18 && age <=50) age = a;
else System.out.println("数据非法");
}
public int getAge() {
return age;
}
}
就近原则
同名变量,就近原则
class Person {
private int age = 10;
public void method() {
int age = 18;
System.out.println(age); // 触发就近原则,输出18
}
}
结果为18。如果要调用成员变量age=10而不是局部变量age=18,则需要用this.age