简介
cava语言支持类的定义和对象的使用。主要支持面向对象编程中的以下概念:
封装
抽象
类
对象
实例
方法
cava中面向对象模块的语法设计,与Java和C#语言基本一致。
示例
定义一个名为 Example
的类,在入口函数中创建相应的对象 example
,并访问其身上的成员 PI
:
class Example { // <==
double PI;
Example() {
PI = 3.1415926;
}
static int main() {
Example example = new Example();
double a = example.PI; //a的值为3.1415926
return 0;
}
}
功能介绍
类的定义
类的定义由 class
关键字开始,内部主要包含以下操作:
定义成员变量:定义承载对象中数据的变量
定义构造函数:对象创建完毕后负责对象数据的初始化
定义成员函数:定义函数作为访问对象的方法
定义类函数:定义类级别函数,被所有对象共享,并可以直接通过类名访问
class Example { // 定义类Example
public double PI; // 定义成员变量
Example() { // 定义构造函数
PI = 3.1415926;
}
double getPI() { // 定义成员函数
return PI;
}
static int main() {
Example example = new Example();
double a = example.getPI(); //a的值为3.1415926
return 0;
}
}
创建对象
当类定义完毕后,即可开始使用类来创建对象。创建对象主要包含以下三步:
声明:声明一个变量,并指定变量对应的类型
实例化:结合内置关键字
new
来产生一个新的对象初始化:
new
关键字后紧跟的函数确定了对象创建后使用的构造函数,构造函数承担了对象数据的初始化任务
以下是一个例子,注意在 main
函数的第一行,我们使用刚刚定义的 Example
类型创建了一个对象,并将其保存在一个名为 example
的变量中。对象创建完毕后,可以使用 example
变量访问对象上的数据成员。
class Example {
double PI;
Example() {
PI = 3.1415926;
}
static int main() {
Example example = new Example();
return 0;
}
}
成员变量
以下例子中定义了一个名为 PI
、类型是 double
的成员变量:
class Example {
double PI; // <==
Example() {
PI = 3.1415926;
}
}
注意:暂不支持在成员变量定义时指定初始化值,成员变量初始化请在构造函数中完成。
class Example {
double PI = 3.1415926; //目前不支持在定义成员变量时进行初始化
}
构造函数
在cava中,构造函数是一种特殊的成员函数。构造函数有以下两个要求:
构造函数的名称必须和类名一致
构造函数没有返回值,且不可以指定返回值
构造函数在对象创建后会自动被调用,执行构造函数内的指令完成对象数据的初始化。cava中支持定义多个构造函数,每次对象构造会根据 new
后语句的形式,选择相应构造函数进行初始化。在以下例子中,我们在入口函数 main
中构造了两个对象,其中第一个对象使用构造函数A初始化,初始化完毕后,成员 PI
的值为 3.1415926
;第二个函数使用构造函数B初始化,初始化完毕后,成员 PI
的值为用户传入的 3.14
class Example {
public double PI;
Example() { // <== A
this.PI = 3.1415926;
}
Example(double customPI) { // <== B
this.PI = customPI;
}
double getPI() {
return PI;
}
static int main() {
Example example1 = new Example(); // 使用构造函数A进行初始化
double a = example1.getPI();
Example example2 = new Example(3.14); // 使用构造函数B进行初始化
double b = example2.getPI()
return 0;
}
}
注:构造函数支持重载
成员函数
成员函数提供了对成员变量操作的封装,对象的使用者通过调用成员函数,来读取和修改对象的成员变量。在成员函数的定义中,可以直接访问成员变量。如果函数作用域内存在另一个同名变量,则通过该变量名访问时会优先使用函数作用域内的变量。此类情况可以通过在变量前添加 this
前缀,来限定使用成员变量。
class Example {
public double PI;
Example() {
this.PI = 3.1415926;
}
void getPI() {
return PI;
}
static int main() {
Example example = new Example();
double a = example.getPI();
return 0;
}
}
注:成员函数支持函数重载。在类中可以定义多个同名成员函数,编译器会在函数的调用处,根据调用参数的类型和个数选择出最匹配的函数,执行调用。
类函数
类函数是属于类的函数,且被所有该类的成员共享。类函数通过在函数定义中增加 static
修饰符创建,并可以直接通过类来访问,无需创建相应对象,而成员函数必须通过对象访问。
class Example {
static double getPI() { // <==
return 3.1415926;
};
static int main() {
double a = Example.getPI();
return 0;
}
}
继承和多态
cava暂时不支持类的继承。