前面讲到了抽象与对象,抽象是把同类事物的共同特征抽取出来归纳为类,类的具体实例为对象。例如:把具有汁液多、糖分多、含有挥发性芳香物质、可以生食等特征的事物归纳为水果类,苹果、葡萄、生梨则为水果类的具体实例对象。
在面向对象编程思想中,不仅把汁液多、糖分多、含有挥发性芳香物质、可以生食等的共同特征放到水果类里,同时也把水果的开花、落果、膨大、成熟等共同行为放到水果类里,这样水果类既包含了水果所具备的共同特征,也包含了开花、落果、膨大、成熟等共同行为。
类是对象的属性和行为的载体,反过来说具有相同属性和行为的一类实体被称为类。水果类具有所有水果的共同属性和行为。类的结构如下图所示:
在Java语言中,类的属性是以成员变量的形式定义的,类的行为是以方法形式定义的。类定义完成后,要在程序中使用类,还需要把类实例化为对象才能使用。
类的封装就是把现实世界同类事物的共同特征和行为抽取出来,放到一个新建的类中,并设置类属性(特征)和行为的访问权限,同时提供外部访问类属性和行为的方法。
把事物的属性和行为封装在一起,可以对外隐藏内部数据,控制用户对内部数据的修改和访问,封装也消除了面向过程编程中数据与操作分离所带来的种种问题,提高了程序的可复用性和可维护性。
下面以水果类为案例,具体说明类封装的过程。
在eclipse下新建项目PbaseUnit13,创建包fruits,在fruits包下创建Java类Fruits,在创建Fruits时,不要选择创建main方法。代码如下:
/**
* @Title: Fruits.java
* @Package fruits
* @Description: Java基础知识课程案例
* @author 编程训练营
* @date
* @version V1.0
*/
package fruits;
/**
* @ClassName: Fruits
* @Description: 类(类的封装)案例
* @author 编程训练营
* @date
*
*/
public class Fruits {
//水果类汁液含量属性
private String water;
//水果类糖分含量属性
private String sugar;
//水果类芳香度属性
private String fragrance;
//水果类的构造方法
Fruits(String inwater,String sugar,String fragrance)
{
this.water = inwater;
this.sugar = sugar;
this.fragrance = fragrance;
}
// 水果类的开花行为
public void flower()
{
System.out.println("开花");
}
// 水果类的成熟行为
public void ripe()
{
System.out.println("成熟");
}
// 水果类的落果行为
public void drop ()
{
System.out.println("落果");
}
}Fruits类结构分析
Fruits类有三个成员变量,这三个成员变量分别对应水果类的三个属性。Water成员变量对应水果类的汁液含量属性;sugar成员变量对应水果类的糖分含量属性;fragrance成员变量对应水果类的芳香度属性。
Fruits类也提供了三个方法,分别对应水果类的三个行为。flower()方法对应水果类的开花行为;ripe()方法对应水果类的成熟行为;drop()方法对应水果类的落果行为。这三个方法也称为成员方法。
与类名相同的Fruits()方法是类的构造方法,当实例化类时,该构造方法会被自动调用。
代码中的public、private是类访问权限修饰符,用来限定外部对类、类成员变量、类成员方法的访问权限。
关于类的成员变量、成员方法、构造方法、访问权限等内容在后面的课中会详细讲述。