类、字段、方法
构造方法,与类同名的方法,专门用于创建对象,完成初始化工作。
构造方法的方法名与类名相同。
没有返回类型,也不能写void。
构造方法的主要作用是完成类对象的初始化工作。
构造方法一般不能像普通函数那样调用,而是用new来调用。
在创建一个类的新对象的同时,系统会自动调用该类的构造方法为新对象初始化。
如果没有定义构造方法,系统会自动产生一个不带参数,方法体为空的默认构造方法。如果用户有定义,系统不再生成默认的。
方法的重载
方法含义相同,但带有不同的参数,这些方法使用相同的名字,这就是方法的重载(overloading)。多个方法用相同的名字,但是参数列表必须不同(参数个数不同,参数类型不同,参数类型顺序不同),返回值类型可以相同可以不同。构造方法也是可以重载的,方法类似。
this的使用
在方法及构造方法中,可以使用this来访问对象的字段和方法。
使用this可以解决局部变量或参数变量与字段变量同名的问题。常在构造方法中使用。
通过this("参数");来调用另一种构造方法,必须放在第一句。
this指的是调用对象本身,在static方法中,不能使用this。在所有非static方法中,都隐含了一个参数this。
类的继承
继承(inheritance)是面向对象的程序设计中的重要特征。继承得到的类为子类(subclass),被继承的的类为父类或超类(supperclass),父类包括所有被直接或间接被继承的类。不支持多重继承。子类继承父类的状态和行为,也可以修改,并添加新的状态和行为。Java中所有的类都是直接或间接的继承java.lang.Object得到的。
通过在类的声明中加入extends子句来创建一个类的子类。如果没有extends子句,默认为java.lang.Object的子类。
字段的继承、隐藏、添加
子类可以继承父类的所有字段(没有private或static修饰)。子类重新定义一个从父类那里继承的完全相同的字段变量,称为变量的覆盖。
定义子类时,加上新的字段变量,使子类比父类多一些属性。
方法的继承、覆盖、添加
父类的非私有方法可以被子类自动继承。
重新定义与父类同名的方法,实现对父类方法的覆盖(Overriding)。
方法的重载(Overloading)。
可以添加新的方法。
super的使用
super可以区分与父类同名的域与方法。super可以访问被子类隐藏的同名变量。覆盖父类同名方法后,通过super可以调用父类的方法。
通过super();可以调用父类的构造方法,此时super只能放在第一句。
父类对象与子类对象的转换
需要父类对象时可以用一个子类对象来强制转换,反之不可。
包
package语句作为Java源文件的第一条语句,指明该文件中定义的类所在的包。
使用Java中已经提供的类,需要import语句来引入所需要的类。Java编译器为所有程序自动引入java.lang。
import java.awt.*只能表示本层次的所有类,不包括子层次下的类。
接口
接口(interface)就是方法定义和常量值的集合。
通过接口可以实现不相关类的相同行为,而不需要考虑这些类之间的层次关系。
通过接口可以指明多个类需要实现的方法。
通过接口可以了解对象的交互界面,而不需要了解对象所对应的类。
可以把用于完成特定功能的若干特征组织成接口,凡需要实现这种特定功能的类,都可以继承这个接口。在继承接口的各个类中,要具体定义接口中各抽象方法的方法体。因而在Java中,把对接口的继承称为实现(implement)。
定义接口
[public] interfance 接口名 [extends 父接口列表]
{ //接口体
//常量域声明
[public][static][final]域类型域名=常量值;
//抽象方法声明
[public][abstract]返回值方法名(参数列表)[throw 异常列表];
}
通常接口名以able或ible结尾,表示能完成一定的行为。
接口中的字段实际上是常量,字段前面即使省略修饰符,仍然默认为public static final。
接口中的方法都是抽象方法,不能有实现体;方法前面即使省略修饰符,仍然默认为public abstract。一般省略字段和方法的修饰符。
实现接口
在类的声明部分,用implements关键字声明将要实现哪些接口。
如果实现接口的类不是abstract的抽象类,则在类的定义部分必须实现所有抽象方法。
类在实现某接口的抽象方法时,必须使用相同的方法头。
接口的抽象方法的访问限制符都已指定为public,所以在类的实现方法时,必须显示地使用public修饰符。
一个类只能有一个类但是可以实现多个接口。在implements子句中用逗号分隔。
接口可以作为一种引用类型来使用。任何实现该接口的类的实例都可以存储在该接口类型的变量中,通过这些变量可以访问类所实现的接口中的方法。
枚举
枚举实际上是用一些符号来表示的常量。定义枚举可以使用关键字enum。enum Direction{EAST,SOUTH,WEST,NORTH} Direction dir=Direction.NORTH;
枚举类型不是整数,而是引用类型,本质是类实现的。所以可以定义成员方法及构造方法,也可以实现接口。所有枚举都继承了java.lang.Enum类,所以可以覆盖toString()方法,也可以使用values()方法来取得所有成员,每个成员都有ordianl()方法得到序号。