快学scala第五章习题答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
6 类
6.1 改进5.1节的Counter类,让它不要在Int.MaxValue时变成负数
6.2 编写一个BankAccount类,加入deposit和withdraw方法,和一个只读的balance属性
6.3 编写一个Time类,加入只读属性hours和minutes,和一个检查某一时刻是否早于另一时刻的方法
before(other:Time):Boolean。
Time对象应该以new Time(hrs,min)方式构建。
其中hrs以军用时间格式呈现(介于0和23之间)
6.4 重新实现前一个类中的Time类,将内部呈现改成午夜起的分钟数(介于0到24*60-1之间)。
不要改变公有接口。
也就是说,客户端代码不应因你的修改而受影响
6.5 创建一个Student类,加入可读写的JavaBeans属性name(类型为String)和id(类型为Long)。
有哪些方法被生产?(用javap查看。
)你可以在Scala中调用JavaBeans的getter和setter方法吗?应该这样做吗?
javap -c Student 后显示如下
6.6 在5.2节的Person类中提供一个主构造器,将负年龄转换为0
6.7 编写一个Person类,其主构造器接受一个字符串,该字符串包含名字,空格和姓,如new Person("Fred Smith")。
提供只读属性firstName和lastName。
主构造器参数应该是var,val还是普通参数?为什么?
必须为val。
如果为var,则对应的此字符串有get和set方法,而Person中的firstName和lastName为只读的,所以不能重复赋值。
如果为var则会重复赋值而报错
6.8 创建一个Car类,以只读属性对应制造商,型号名称,型号年份以及一个可读写的属性用于车牌。
提供四组构造器。
每个构造器fc都要求制造商和型号为必填。
型号年份和车牌可选,如果未填,则型号年份为-1,车牌为空串。
你会选择哪一个作为你的主构造器?为什么?
6.9 在Java,C#或C++重做前一个练习。
Scala相比之下精简多少?
这个就不写了。
6.10 考虑如下的类
class Employ(val name:String,var salary:Double){
def this(){this("John Q. Public",0.0)}
}
重写该类,使用显示的字段定义,和一个缺省主构造器。
你更倾向于使用哪种形式?为什么?
个人更喜欢第二种方式,简单明了。