scala学习-介绍scala的几种特性6

案例来自于引路蜂
本文介绍完整的定义一个类。定义函数化对象,函数化对象的意思是所定义的类和对象都不包含任何可以修改的状态。还会介绍Scala的几种特性:类参数和构造函数,方法,操作符,私有成员,重载,过载,条件查询,引用自身。
1类定义规范
定义一个有理数的类。有理数的定义:一个有理数可以表示成分数的形式:n/d,其中n和d都是整数,d不能为0。
因此我们定义的个有理数类,Rational类,能支持上面的描述和有理数的操作。有理数的=-*/<,并且可以支持有理数的规范表达,比如2/10,其规范表达是1/5,分子和分母的最小公倍数为1。
我们开始来定义这个类,定义成函数化对象,就说明里面是没有可变的状态的,即是使用immutable方式来定义。我们需要定义分子和分母。

package org.wq.learn
class Rational (n:Int,d:Int)

这和java中定义的类不一样,定义类的时候可以带参数,这个叫做类参数。类参数就是和构造函数一样的功能哈。这样就简化了代码。
Scala编译器会编译任何不属于类成员和类方法的其他代码,因为这些代码将作为类构造函数,比如在下面打印一条语句。

package org.wq.learn
class Rational (n:Int,d:Int){
  println("i am a class construction~"+n+"/"+d)
}
object Rational extends App{
  new Rational(1,2)
}
结果为:i am a class construction~1/2

可以看见在创建对象的时候,自动执行了主构造函数的代码。
2重定义类的toString方法
当你使用println打印类的时候

 println(new Rational(1,2))
 结果为:org.wq.learn.Rational@74a14482

结果不直观,这是因为,使用了缺省的类作为toString定义(object),缺省打印的是类名+@+16进制对象的地址。所以要重载toString方法。在Scala中,你可以使用override来重载方法,和java一样。override要写在def前面哦。

package org.wq.learn
class Rational (n:Int,d:Int){
  println("i am a class construction~"+n+"/"+d)
  override def  toString = n+"/"+d
}
object Rational extends App{
 println(new Rational(1,2))
}
结果为:1/2

3前提条件检测
有理数分母步能为0,这里是d不能为0。前面定义,d为0是可以运行的。怎么解决分母不能为0的问题呢。面向对象编程的一个有点是数据的封装。对于一个有理数的前提条件是分母步为0,Scala中定义了为传入构造方法和方法的参数的限制范围,也就是说调用这些函数或者方法需要满足这些条件。Scala中使用了require的方法(require为Predef对象定义的一个方法,Scala环境自动载入这个类的定义,无需import),因此修改代码为:

package org.wq.learn
class Rational (n:Int,d:Int){
  println("i am a class construction~"+n+"/"+d)
  require(d!=0)
  override def  toString = n+"/"+d
}
object Rational extends App{
 println(new Rational(1,0))
}
结果为:i am a class construction~1/0
Exception in thread "main" java.lang.IllegalArgumentException: requirement failed

如果分母为0,就抛出IllegalArgumentException异常。
今天加班太累,就休息了……
明天继续……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猫二哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值