面向对象程序设计(OOP)就是使用对象进行程序设计。对象(object)代表现实世界中可以标识的一个实体。例如一个学生,一个圆都可以看作一个对象。
一个对象的状态是指那些具有它们当前值的数据域,举个例子来说,一个圆对象,一个圆对象具有一个数据域radius,它是标识圆的属性。一个对象的行为是由方法定义的,调用对象的一个方法就是要求对象完成一个动作,例如可以为圆对象定义一个名为getArea()的方法,圆对象可以调用getArea()来返回圆的面积。
我们可以从一个类中创建多个实例,类和对象之间的关系类似于配方和食物的关系,可以用一种配方做出任意多的食物来。
public class CircleArrayQueueDemo
拿上一篇文章做一个例子,第一个类CircleArrayQueueDemo是主类,它的唯一目的就是测试第二个类:
class CircleArray
使用这样的类的程序通常称为是该类的客户,运行这个程序时,Java运行系统会调用这个主类的main方法,可以把两个类放在同一个文件中,但是文件中只能有一个类是公共的。此外,公共类必须与文件同名,因此,如例子中所示,文件名就应该是CircleArrayQueueDemo.java,因为类CircleArrayQueueDemo是公共的。
主类中包含main方法,和创建数组一样,使用new操作符从构造方法创建一个对象,构造方法是一种特殊的方法,具有以下几个性质:
(1)构造方法必须具备和所在类相同的名字
(2)构造方法没有返回类型,也没有void
(3)构造方法是在创建一个对象使用new操作符时调用的。
构造方法的作用是初始化对象,构造方法具有和定义它的类完全相同的名字,和所有其他方法一样,构造方法也可以重载,这样更易于用不同的初始数据值来构造对象,举一个例子:
类名 对象引用变量 = new 类名()
Circle myCircle = new Circle();
变量myCircle中放的是对Circle对象的一个引用。
访问对象的数据和方法:
在创建一个对象之后,它的数据和方法可以使用原点运算发(.)来访问和调用,例如myCircle.getArea()。
上文中Circle类的数据域radius称为一个实例变量,实例变量是绑定到类的某个特定实例的,它是不能被同一个类的不同对象所共享的,例如创建了如下两个对象:
Circle circle1 = new Circle();Circle ciecle2 = new Circle(5);
circlr1中的radius和ciecle2中的radius是不相关的,circle1中的radius变化不会影响到circle2。如果想让一个类的所有实例共享数据,就需要使用静态变量。
那么如何判断一个变量或方法应该是实例的还是静态的?如果一个变量或方法依赖于类的某个具体实例,那么就应该将它定义为实例变量或者实例方法,如果一个变量不依赖于类的某个具体实例,就应该将它定义为静态变量或者静态方法,例如:每个圆都有自己的半径,半径都依赖于某个具体的圆,因此半径radius就是Circle类的一个实例变量。
我们同样也可以在类,方法和数据域前使用public修饰符,表示它们可以被任何其他的类访问,如果没有使用可见性修饰符,那么默认类,方法和数据域是可以被同一个包中的任何一个类访问的,这称作包内访问。
与public修饰符对应的就是private修饰符,它限定方法和数据域只能在它自己的类中被访问