<a href="http://blog.csdn.net/ooppookid/article/category/6134850">点击进入_更多_java千百问</a>
抽象,和具体对立,定义了事物的性质,事物的性质会随着抽象概念的改变而改变。
抽象类和普通类一样,是一个模版。相比普通类,抽象类不具备实例化对象的能力。抽象类也可以定义属性和方法,比之普通类,它还可以定义没有实现的方法,即抽象方法。
通常会用一个具体类(子类)继承抽象类(父类),实现抽象类中的抽象方法。父类包含子类的集合的通用功能,但父类本身过于抽象而无法被单独使用。
例如:将脊椎动物定义为一个抽象类,它具有头、躯干、尾等属性,具有吃、繁殖等具体行为,还有一个抽象行为:吠叫,吠叫这个行为并不具体,因为不同种类的脊椎动物吠叫行为并不相同。狗类继承脊椎动物类,实现狗的吠叫行为。
java中使用abstract关键字来声明一个类的抽象。abstract需要写在class关键字前面。
实例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
请注意,这个employee类与具体类没有什么不同。现在这个类是抽象的,但它仍然有三个字段,七种方法,和一个构造函数。
但现在如果想实例化这个类,如下:
编译后,会得到以下错误:
employee.java:46: employee is abstract; cannot be instantiated
employee e = new employee(“george w.”, “houston, tx”, 43);
^
1 error
我们可以继承employee类,如下所示:
这里,我们可以实例化一个salary对象,这个对象将继承employee类的三个字段,七种方法。
运行后产生以下结果:
constructing an employee
call mailcheck using salary reference –
within mailcheck of salary class
mailing check to mohd mohtashim with salary 3600.0
call mailcheck using employee reference–
mailing check to john adams with salary 2400.
如果你想在抽象类中定义一个方法,但是希望该方法由子类来决定实际的执行情况,可以在父类中定义抽象方法。
声明一个抽象方法也需要abstract关键字。抽象方法只是一个方法签名,没有方法实现,故不需要使用花括号。
如下所示:
声明一个抽象方法有两个规则:
这个类也必须是抽象类。
所有子类要么重写抽象方法,要么声明本身也为抽象。
如果salary类是employee类的子类,那么它必须实现computepay() 方法,如下: