一、类的定义
修饰符 class 类型 [extends 父类名]{
类型 成员变量1;
类型 成员变量2;
……
修饰符 类型 成员方法1{
类型 局部变量;
方法体
}
修饰符 类型 成员方法2{
类型 局部变量;
方法体
}
……
}
class前的修饰符可以有多个,用来限定所定义的类的使用方式。
二、创建一个对象
1.对象引用
类名 变量名;
2.对象实例化
变量名 = new 类名(参数列表);
3.对象使用
对象引用.成员数据
对象引用.成员方法(参数列表);
三、方法
1.定义一个抽象数据类型后,还需要为这个类型的对象定义相应的操作,也就是方法。定义方法如下:
<修饰符><返回类型><名字>(<参数列表>)<块>
2.Java只“按值”传送自变量,即方法调用不会改变自变量的值。当对象实例作为自变量传送给方法时,自变量的值是方法的引用,也就是说,传送给方法的是引用值。在方法内,这个引用值是不会被改变的,但可以修改该引用指向的对象内容。因此,当从方法中退出时,所修改的对象内容可以保留下来。
3.重载方法名
如果需要在同一个类中写多个方法,让他们对不同类型的变量进行相同的操作,就需要重载方法名。一个方法区别与另一个方法的要素有:方法名、参数列表及返回值,所以重载方法名只有靠参数列表来区分方法。
注意事项:1)调用语句的自变量列表必须足够判明要调用的是哪个方法。2)即使方法的返回类型不同,重载方法的参数列表也必须不同,即参数个数或参数类型不同。
四、构造方法
在说明一个引用后,要调用new为新对象分配空间,也就是要调用构造函数,也称为构造方法。它是生成实例对象的唯一方法。在调用new时,即可以带有变量,也可以不带变量,这要视具体的构造方法而定。
构造方法是特殊的类,有着特殊的功能。它的名字与类名称相同,没有返回值,在创建对象实例时由new运算符自动调用。同时为了创建实例的方便,一个类可以有多个具有不同参数列表的构造方法,及构造方法可以重载。
因为构造方法的特殊性,它不允许程序员按通常调用的方法的方式来调用,实际上它只用于生成实例时系统自动调用。
构造方法不能说明为native、abstract、synchronized或final,也不能从父类继承构造方法。
每个类都必须至少有一个构造方法,如果程序员没有为类定义构造方法,系统会自动为该类生成一个默认的构造方法,其参数列表及方法体均为空,所生成的对象的属性值也为0或空。
构造方法的特性总结如下:
1)构造方法的名字与类名相同。
2)没有返回值类型。
3)必须为所有的变量赋初值。
4)通常要说明为public类型的,即公有的。
5)可以按需包含参数列表。
五、子类
实现了继承,使用继承这一面向对象的特性,可以支持软件的可复用性,保证了代码在类中间可共享,同时程序员可以节省编程时间。
1.extends关键字
面向对象的语言提供了派生机制,它允许程序员用以前已定义的类来定义一个新类。新类称为子类,原来的类称作父类或超类。子类的定义格式如下:
public class Aextends B{
……
}
2.单重继承
如果一个类有父类,则其父类只能有一个,Java只允许从一个类中扩展类,这条限制叫单重继承。虽然一个子类可以从父类继承所有的方法和成员变量,但它不能继承构造方法。只有两种方法可让一个类得到一个构造方法:一种方法是自己编写一个构造方法;另一种方法是,因为用户没有写构造方法,所以系统为类提供唯一一个默认的构造方法。
六、方法重写
重写一个方法的目的,既可以是取代或修改原有方法,也可以是要在某些方面进行扩展,或者加以改进。一般的,子类重写父类方法多发生在这三种情况下:子类要做父类不同的事情;在子类中取消这个方法;子类要做比父类更多的事情。
要注意的是,重写的同名方法中。子类方法不能比父类方法的访问权限更严格。
重写的规则如下:
1)重写方法允许访问范围不能小于原方法。
2)重写方法所抛出的异常不能比原方法更多。
调用父类构造函数时,调用语句必须出现在子类构造方法中的第一行,采用super()方法进行调用。
七、静态方法
如果需要在尚未创建一个对象实例的时候就去引用它的程序代码,那么标记上关键字static即可实现,该方法称为静态方法。调用静态方法时,前缀使用的是类名,而不是对象实例名,如果从当前类中的其他方法中调用,则不需要写类名,可以直接写方法名。
使用静态方法时,有两个特别的限制必须注意:
1)由于静态方法可以在没有定义它所从属的类的对象的情况下加以调用,故不存在this值。因此,一个静态方法只能使用其内部定义的参数或静态变量。
2)静态方法不能被重写。
八、内部类
内部类具有以下几个属性:
1)类名只能在定义的范围内被使用,内部类的名称必须区别于外部类。
2)内部类可以使用外部类的类变量和实例变量,也可使用外部类的局部变量。
3)内部类可以定义为abstract类型。
4)内部类也可以是一个接口,这个接口必须由另一个内部类来实现。
5)内部类可以被定义为private或protected类型。当一个类中嵌套另一个类时,访问保护并不妨碍内部类使用外部类的成员。
6)被定义为static型的内部类将自动转化为顶层类,他们不能再使用局部范围中或其他内部类的数据或变量。
7)内部类不能定义static型成员,而只有顶层类才能定义static型成员。如果内部类需要使用static型成员,这个成员必须在外部类中加以定义。
应用内部类的好处在于它是创建事件接收者的一个方便的方法。