如果你所编写的软件允许用户通过点击鼠标并拖放来绘制矩形和椭圆,你会需要什么class?

一种识别出所需class的方法是标示出所有的名词,这样我们就有了RectangleOval两个可能的class。两者都是简单的形状,可以由两点所决定。因此你还可以创建class SimpleShape来储存这两点以及绘制图形的颜色。

你能否实际创建一个SimpleShape object?它会是怎样的?你又该如何绘制它?事实上因为我们并不知道SimpleShape该是怎样,我们需要用abstract来修饰它,意味着你并不能以此来创建任何object。我们可以这样定义SimpleShape

public abstract class SimpleShape

再次重申,无法用abstract class来创建新object,否则会报错。运行以下例子看看。

public abstract class SimpleShape
{
   public static void main(String[] args)
   {
      SimpleShape s = new SimpleShape();
   }
}

abstract class的主要目的在于被child class继承

如果不能用来创建object,abstract class有什么用呢?事实上abstract class会是很不错的parent class。通常abstract class有至少一个abstract的method,有声明但没有具体实现。不过除此之外,正常class的元素,如构造函数,field和带实现的method也可以放在abstract class中。abstract method所在的class必须是abstract class

我们之前提到的class SimpleShape可以有构造函数和field以存储定义形状的坐标点,以及用于计算宽和高的method。唯一需要定义为abstract的method是draw,因为SimpleShape并不能直接被绘制在屏幕上。

当你希望把一些数据和行为包含的parent class中,但至少一个method需要被child class所重写,abstract class会非常称手。SimpleShape的每个child class可以定义自己draw的行为。


陈 欣

AADPS创始人

发表评论