封装的意义
- 将数据和对数据的操作包装成一个对象类型,使对象成为包含一组属性和运行单位
- 实现信息隐藏,类即需要提供与外部联系的方法又要尽可能的隐藏类中的某些数据和实现细节
实现封装的措施
- 构造方法和析构方法
- 方法重载
- 访问控制权限
- 静态成员
构造方法和析构方法
构造方法
public class MyDate1 {
public MyDate1(int year, int month, int day) {
this.year=year;
this.month=month;
this.day=day;
}
public MyDate1() {
this(1970, 1, 1);
}
public MyDate1(MyDate1 d) {
this(d.year,d.month,d.day); //this指代构造函数
}
}
分析:上面代码使用了构造函数将对象的初始化的具体实现封装在类中,并且采用了重载,根据不同的参数列表,包括数量、数据类型、次序不同,调用对应的构造方法,其中this的使用方法有两种,具体分析见另一篇this使用讲解
析构方法
public void finalize(){
System.out.pritln("释放对象 ("+this.toString()+")");
}
分析:析构方法用来释放实例并执行特定操作,一个类只能有一个finalize方法(析构方法,一般当对象超出作用域时执行对象的析构方法,一个对象也可以调用析构方法释放自己
方法重载
定义:函数的名字相同,参数列表不同,包括数量,次序,数据类型(例子见构造函数的例子)
访问控制权限
静态成员
静态成员属于类在类内部,可以直接访问静态成员,省略类名静态成员也可以通过对象引用,在静态成员方法中,不能访问实例成员,不能使用this引用,不能声明方法的局部变量为static
public class MyDate1 {
public static int thisYear;
static {
thisYear = 2012;
}
public static int getThisYear() {
return thisYear;
}
public static boolean isLeapYear(int year) {
return year % 400 == 0 || year % 100 != 0 && year % 4 == 0;
}
public static int daysOfMonth(int year, int month) {
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31;
case 4:
case 6:
case 9:
case 11:
return 30;
case 2:
return MyDate1.isLeapYear(year) ? 29 : 28;
default:
return 0;
}
}
}