![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=1738841907-mgghGc0jooEH3ZaH0o5J2qenwzmxHxQC-0-ee604fe7d24502f3e68ca0407e6d90d3)
示例10.1 定义抽象方法和抽象类
在这个类中,contents被声明为一个没有实现的方法。换句话说,这个方法是Element类的抽象(abstract)成员。一个包含抽象成员的类本身也要声明为抽象的,做法是在class关键字之前写上abstract修饰符:
![](https://epubservercos.yuewen.com/E8DF3B/20205397808551606/epubprivate/OEBPS/Images/40272-00-214-2.jpg?sign=1738841907-0ZBbe84MfLjEkYH9gfy7xhfdoCUfblzE-0-0bd7db534760fb01a66cbf65e6d142f5)
修饰符abstract表明该类可以拥有那些没有实现的抽象成员。因此,不能直接实例化一个抽象类。尝试这样做将遇到编译错误:
![](https://epubservercos.yuewen.com/E8DF3B/20205397808551606/epubprivate/OEBPS/Images/40272-00-214-3.jpg?sign=1738841907-n2351prOrCNgZ98F02xLEm3XvBmNEHCt-0-d9f914d484f43db6a4a43d573e19a1e9)
在本章稍后你将看到如何创建Element类的子类,这些子类可以被实例化,因为它们填充了Element抽象类里缺少的contents定义。
注意,Element类中的content方法并没有标上abstract修饰符。一个方法只要没有实现(即没有等号或方法体),那么它就是抽象的。跟Java不同,我们并不需要(也不能)对方法加上abstract修饰符。那些给出了实现的方法叫作具体(concrete)方法。
另一组在叫法上的区分是声明(declaration)和定义(definition)。Element类声明了content这个抽象方法,但目前并没有定义具体的方法。不过在下一节,我们将通过定义一些具体方法来增强Element。