您的位置:首页 > 编程语言 > Java开发

学习java的一点心得(二)

2016-03-06 23:03 316 查看
2、Java如何创建类

虽然Java在设计的时候是从具体到抽象,即从一堆实体里面抽象出类;但是在使用的时候却是反其道而行之,从类扩展出一个个实体。这有点像神话故事中的造人:女娲先造出一个个模板,然后根据这些模板批量复制;或者就像亚当用自己的一条肋骨复制出夏娃,接着以他俩为模板造出全人类。。

所以,Java编程的主要工作就是在定义模板——类,然后用这个模板生成对象,对象之间的交互就是解决问题的过程。

Java使用class关键字来定义一个类,比如class Apple{},这就定义了一个类Apple。语法上,class关键字后面是类名,类名的首字母必须大写;类名后面是一对花括号,用来存放类的内容。前面说过,类应该有两部分:属性和行为。从语法角度,可以定义只有属性没有行为或反之的类,这完全取决于你的需求。但是两者都没有的话,这样的类是没有意义的。

在Java的语境下,属性被称为数据成员,行为被称为方法成员,当然也有别的叫法,但本质是一样的:属性描述的是静态特征;行为则是动态特征。一个完整的Apple类的例子如下:

class Apple {
double weight;
String color;

void eat() {}
}
可以看到,Java的类很像C语言的结构体。不过区别也是显然的:Java的类中可以定义函数,而C的结构体顶多有一个函数指针指向某个函数,但是不能直接定义函数。Java中函数被称为方法,而且方法只能在类中定义,因为方法代表了类的行为,它是类的一部分。

另一部分就是属性,基本就是C中的变量声明,包括类型和名字,二者共同组成属性。这里我想了很久,觉得对于类的定义而言,变量的名字比类型更重要一些。类型,说到底是计算机存储不同的“值”所采取的的不同方案的产物,是计算机底层的东西,与Java本身的设计没有关系。假设计算机只用一种类型来表示所有的数据,也就是只有一种基本类型,那么定义类的属性时就不必再写类型,直接写属性名字就可以了,因为对于属性的值,计算机将用统一的格式表示、存储。

所以,从静态角度而言(不考虑方法),类和类之间的本质区别是属性的名称及多寡,而非类名;而同一类的各个实体,有着相同的属性,区别只是属性值的不同。所以用变量来表示属性是很合理的,它可以有不同的值。

基本类型是构成类的基础,简单起见,我们仍假设计算机只有一种基本类型。但是基本类型只是从一个维度来描述事物,比如颜色,长度,重量,温度....这些量的值的变化是一维的,沿着一条直线变化;但是还有一些特性用一个维度来描述是不够的,必须要多个维度才能描述。比如描述天气的时候,必须从温度,湿度,风速等很多方面综合到一起才能描述清楚。为了能描述这种多维的性质,有必要把基本类型组合到一起构成一种新的类型,但是这种新的类型怎么产生呢?答案是用类来表示,从这个角度,定义类即是定义新类型。下面我们定义了Weather类:

class Weather {
int tempeature;
int windSpeed;
int humidity;
}
然后我们就可以使用这个新类型来定义“景点”类了:

class Spot {
Weather w;
int history;
int area;
}
这里假设int就是计算机唯一的基本类型。上面的Apple类有一个String类型的变量,它也是组合类型。

故而,类也代表一种类型,而且是区别于基本类型的复合类型。定义类相当于在C中使用typedef为一个结构体重命名。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: