类与对象
面向对象的语言
*记得在哪里看到过,“面向对象”是一种思想,也就是说,C 语言也可以开发出面向对象的程序?
我们想要达到的目标:
易维护,易扩展,易复用
理念:需要完成某种任务时,首先要想到,哪个对象去完成任务;提到数据时。首先想到这个数据是哪个对象的。
特性:
-
封装性 —— 数据 + 对数据的 操作
-
继承性 —— ① 对父类行为的 继承 ② 独有操作的 增添
-
多态性 —— ① 同名 但接受的 消息类型 不同 ② 同一操作 被 不同类型对象 调用时,产生的不同的行为
属性通过变量来刻画,行为通过方法来体现。
类
类体:变量声明+方法定义,用于创建具体实例
例:
class Lader { //类定义
float above; //变量声明
float bottom; //变量声明
float height; //变量声明
float area; //变量声明
float computerArea() { //定义了一个能够计算梯形面积的方法
area = (above + bottom)*height/2.0f;
return area;
}
void setHeight (float h) {
height = h;
}
}
成员变量
-
类型:任何类型
-
有效范围:在整个类内有效,且不受声明位置的影响
-
编程风格:一行一个;首字母小写;见名知意
方法(例)
int speak() //无参数的方法头
{
return 23;
}
int add(int x, int y, int z) //有参数的方法头
{
return x+y+z;
}
-
方法头: 类型 名称(参数列表)
-
方法体: 局部变量的声明 + Java 语句 (*只在方法内有效,且与其声明位置有关)
参数传值
对象调用方法时,参数被分配内存空间,并要求调用者向参数传递值,即方法被调用时必须有具体的值。
传值机制:与 C 语言相同,同为“值传递”
可变参数与进化版的 for 语句
例如:
public void g(double a , int ... x) { }
注意:最后一个参数必须是方法的参数列表中的最后一个参数
反例:
在参数个数经常需要变化时,非常好用。
如:
public int getSum(int ... x) {
int sum = 0;
for(int = 0;i<x.length;i++) {
sum=sum+x[i]; //用下标来访问可变参数
}
return sum;
}
其中的 for 循环部分可以替换为
for(int param : x) { //即 for(声明循环变量 : 参数代表){ }
sum = sum + param;
}