![Scala编程(第4版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/353/38381353/b_38381353.jpg)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
10.2 抽象类
我们的第一个任务是定义Element类型,用来表示元素。由于元素是一个由字符组成的二维矩形,用一个成员contents来表示某个布局元素的内容是合情合理的。内容可以用字符串的数组表示,每个字符串代表一行。因此,由contents返回的结果类型将会是Array[String]。示例10.1给出了相应的代码。
![](https://epubservercos.yuewen.com/E8DF3B/20205397808551606/epubprivate/OEBPS/Images/40272-00-214-1.jpg?sign=1739284305-2ZDGggia2DqSbrMUwFd7t6LEKOshi5G8-0-80ec82a4572ecdeac6f21e34c7402ef5)
示例10.1 定义抽象方法和抽象类
在这个类中,contents被声明为一个没有实现的方法。换句话说,这个方法是Element类的抽象(abstract)成员。一个包含抽象成员的类本身也要声明为抽象的,做法是在class关键字之前写上abstract修饰符:
![](https://epubservercos.yuewen.com/E8DF3B/20205397808551606/epubprivate/OEBPS/Images/40272-00-214-2.jpg?sign=1739284305-lIdu80T7Uso16DDCvY5Uvl0IDO8QnE4E-0-1b16826d559941803680b368436ca6dd)
修饰符abstract表明该类可以拥有那些没有实现的抽象成员。因此,不能直接实例化一个抽象类。尝试这样做将遇到编译错误:
![](https://epubservercos.yuewen.com/E8DF3B/20205397808551606/epubprivate/OEBPS/Images/40272-00-214-3.jpg?sign=1739284305-5w3XkUcAqRBYUYdb42q8V83oBDZFi0Oz-0-809c66a5a3cf8bf1b37f4c83a2ff00db)
在本章稍后你将看到如何创建Element类的子类,这些子类可以被实例化,因为它们填充了Element抽象类里缺少的contents定义。
注意,Element类中的content方法并没有标上abstract修饰符。一个方法只要没有实现(即没有等号或方法体),那么它就是抽象的。跟Java不同,我们并不需要(也不能)对方法加上abstract修饰符。那些给出了实现的方法叫作具体(concrete)方法。
另一组在叫法上的区分是声明(declaration)和定义(definition)。Element类声明了content这个抽象方法,但目前并没有定义具体的方法。不过在下一节,我们将通过定义一些具体方法来增强Element。