资源描述
快学scala第八章习题答案 - 9 继承 9.1 扩展如下的BankAccount类,新类CheckingAccount对每次存款和取款都收取1美元的手续费class BankAccount(initialBalance:Double) private var balance = initialBalance def deposit(amount:Double) = balance += amount; balance def withdraw(amount:Double) = balance -= amount; balance 9.2 扩展前一个练习的BankAccount类,新类SavingsAccount每个月都有利息产生(earnMonthlyInterest方法被调用),并且有每月三次免手续费的存款或取款。在earnMonthlyInterest方法中重置交易计数。 9.3 翻开你喜欢的Java或C+教科书,一定会找到用来讲解继承层级的实例,可能是员工,宠物,图形或类似的东西。用Scala来实现这个例如。 Thinking in Java中的代码 Java代码 9.4 定义一个抽象类Item,参加方法price和description。SimpleItem是一个在构造器中给出价格和描绘的物件。利用val可以重写def这个事实。Bundle是一个可以包含其他物件的物件。其价格是打包中所有物件的价格之和。同时提供一个将物件添加到打包当中的机制,以及一个合适的description方法 9.5 设计一个Point类,其x和y坐标可以通过构造器提供。提供一个子类LabeledPoint,其构造器承受一个标签值和x,y坐标,比方:new LabeledPoint( 9.6 定义一个抽象类Shape,一个抽象方法centerPoint,以及该抽象类的子类Rectangle和Circle。为子类提供适宜的构造器,并重写centerPoint方法 9.7 提供一个Square类,扩展自java.awt.Rectangle并且是三个构造器:一个以给定的端点和宽度构造正方形,一个以(0,0)为端点和给定的宽度构造正方形,一个以(0,0)为端点,0为宽度构造正方形 9.8 编译8.6节中的Person和SecretAgent类并使用javap分析p 类文件。总共有多少name的getter方法?它们分别取什么值?(提示:可以使用-c和-private选项) 总共两个。Person中获得的是传入的name,而SecretAgent中获得的是默认的 9.9 在8.10节的Creature类中,将val range交换成一个def。假如你在Ant子类中也用def的话会有什么效果?假如在子类中使用val又会有什么效果?为什么? 在Ant中使用def没有问题。但是假如使用val那么无法编译。因为val只能重写不带参数的def。这里的def是带参数的 9.10 文件scala/collection/immutable/Stack.scala包含如下定义: class StackA protected (protected val elems: ListA) 请解释protected关键字的含义。(提示:回忆我们在第5章中关于私有构造器的讨论) 此构造方法只能被其子类来调用,而不能被外界直接调用 第 3 页 共 3 页
展开阅读全文