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

Java基础:第三十八讲 抽象类与抽象方法

2010-02-04 19:33 344 查看
本讲要说明的几个问题:什么是抽象类,抽象类的特点,抽象方法,抽象方法与抽象类的关系。

1、什么是抽象类

抽象类,实际上就是对类的进一步抽象。

从前面的介绍中,我们知道在面向对象的分析和设计中有很多次抽象,从现实世界中的对象抽象出软件系统中的对象(保留主要属性和行为,去掉次要属性和行为),从软件系统中的对象抽象出软件系统中的类(去掉属性值,把具体的对象变成了抽象的概念),现在我们要介绍的抽象类是对多个类的抽象结果,抽象类中描述了多个具体类的共同特征和行为,与我们之前说的父类是类似,不同之处在于抽象类不能有具体的对象,抽象类可以有不用实现的方法。

典型的例子就是交通工具,我们知道飞机、轮船、汽车、火车都是交通工具,都可以把乘客从一个地方带到另外一个地方,但是各种不同的交通工具的运行方式是不同的,汽车沿着公路走,火车沿着铁路线走,飞机需要先起飞、飞行、然后降落,有一定的航线。正式因为有这些共同特征,才抽象出交通工具这样的类。

我们可以说具体的飞机、轮船、汽车和火车对象,但是没有交通工具对象,这时候交通工具就是抽象的。

2、如何定义抽象类

使用abstract关键字定义抽象类,例如:

public abstract class A{

...

}

如果某个类是抽象类,则这个类不能有具体的对象。

如果某个类没有具体的对象,这个类还有什么用呢?通过这个类可以派生出子类,子类可以是抽象类也可以是非抽象类。所以有抽象类通常都是作为父类存在的。

3、抽象方法

在前面的介绍中,我们知道方法包括如下组成部分:方法的修饰符、方法的返回值类型、方法的名字、方法的参数列表、方法体。例如:

public int getParentA(){

return super.a;

}

如果一个方法只给出方法的定义部分,而没有方法的具体实现,这个方法就是抽象方法。

例如:

public int getParentA();

抽象方法的含义:某个对象具有这样的方法,但是方法如何实现不清楚。

例如上面的例子,各种交通工具都可以把乘客从一个地方带到另外一个地方,所以交通工具应该具有一个方法——移动,但是具体如何移动,不清楚,所以如果要在交通工具这个类中定义这个方法,只能是抽象的。意味着,交通工具应该有一个方法(移动),但是具体如何实现,需要看具体的子类。

另外一个典型的例子是几何图形,在软件系统中需要画各种图形,每种图形是具体的类,而图形作为抽象类。要在系统中显示各种图形,每种图形类都应该有画的方法,但是各种图形的画法不同,例如三角形需要给出3个点,而圆需要给出圆心和半径,直线需要给出两个点。所以在图形抽象类中中只能声明这个一个画的方法,具体实现留给子类。

4、如何定义抽象方法

抽象方法使用关键字abstract定义,例如画图的方法可以定义为:

public abstract void print();

在类中,如果一个方法只给出声明,没有具体实现,应该使用abstract定义为抽象方法。

5、抽象方法与抽象类

如果一个类中出现了抽象方法,则这个类必须定义为抽象类。例如上面的图形类:

public abstract class Graphics{

...

public abstract void print();

}

子类可以去实现具体的画法,例如三角形:

public class Triangle extends Graphics{

private Point[] p; // 描述三角形的三个点

public abstract void print(){

... // 根据3个点画图

}

}

请记住:有抽象方法的类一定是抽象类。

抽象类一定要有抽象方法吗?不一定,抽象类可以没有抽象方法。

抽象类一定不能有实例,下面的代码是错误的:

Graphics g = new Graphics();

6、抽象类的作用

抽象类用于派生新的子类,子类在继承抽象类的时候,必须实现所有抽象方法,除非子类还是抽象类。

抽象类的子类允许是抽象类。

下次介绍面向对象的一大特性——多态性。

上一次: 第三十七讲 成员方法的继承与覆盖

下一次:第三十九讲 多态

李绪成 CSDN Blog:http://blog.csdn.net/javaeeteacher
邀请您为好友:http://student.csdn.net/invite.php?u=124362&c=7be8ba2b6f3b6cc5
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: