查看文本打印 1 1
fs_雪花

导航

 

#单例对象

对象的构造器在该对象第一次被使用时调用

 #伴生对象

当一个单例对象存在同名类的时候,成为伴生对象

class HELLOWORLD{...}

object HELLWORLD{...}

类和伴生对象可以互相访问私有属性,但是必须存在同一个源文件中

类的伴生对象可以被访问,但并不在作用域中

 

apply方法:未细讲

 

练习:

编写一个Time类,加入私有属性hours和minutes

加入方法get,查询hours,minutes的值,并输出(hours,minutes)

加入方法do,min自增1,若min=60时置为0,且hour增1,若hours=24,时,置为0

Time对象的构造形式为new Time(h,min),  h,min 均为Int,且 0<=h<23, 0<=min<59

 

class Time{
private var hours=0
private var minutes=0
def get() {println(hours,minutes)}
def get_h() {println(hours)}
def get_min() {println(minutes)}
def do1() {
minutes +=10
if(minutes==60){
minutes=0
hours+=1
if(hours==24){
hours=0
}
}
}
}

 

 

#拓展(继承)

class week extends month{...}

继承所有非私有成员

子类可以重写超类的成员

 

#单例对象可以从类中继承

object day extends week{...}

 

 

#重写

override

class week extends month{

    override def firstday = {...}

}

 

class week (override val lastday:String) extends month{...}

超类的修改不会检查子类。

 

##重写规则:

###重写def:

> 用val: 可以重写超类没有参数的方法(getter)

> def: 重名即可

> var: 同时重写getter、setter方法,只重写getter方法就报错

###重写val

> val: 重名  getter方法重写超类的getter方法

###重写var

> var: 且当超类的var是抽象的才能被重写,否则超类的var都会被继承

 

###举例

class month{

  val one = 25  //可在子类用val重写

  val tow = 15 //不可用var重写,不是抽象的

  var three:Int //可用var重写

  def firstday =  //可在子类用val重写

  def now =  //可在子类用var重写, now,now_一起重写 

  def now_=  

  def lastday(m:Char)={} //可用def重写

}

总结:

  子类中,def只能重写def 。 val 可以重写val或者不带参数的def, var只能重写抽象的var或者超类的getter/setter对

 

#抽象

# 不能被实例的类叫做抽象类

abstract year{

    val name:Array[String]

    var num:Int

    def sign 

}

 

#保护

当一个类不希望被继承、拓展时,可在类声明前加上final保留字

 

 #构造

先运行超类构造器,再运行子类构造器

class month {

    val  num = 31

    val day = new Array[Int](num)}

class extends month {

    overide val num = 7 }

 

val a = new week ##注意: 结果是num=7, day的长度为0

#解决办法:

> 将超类的val 声明为 final  #不够灵活

> 将超类的val声明为laze  #暂不初始化。  效率偏低

> 子类中使用提前定义的语法

   class week extends (override val num = 7} with month {...}

 

#scala特质

 trait reset{

        def reset(m:Int,n:Int)=if(m>n) 1 }

 

class week extends reset with B with C{...}

所有java接口都可以当做特质使用在scala中

构造从左到右

>超类 

>父特质

>第一个特质

>第二个特质(父特质不重复构造)

>类

右侧胜出

 

 

 

   

 

posted on 2016-12-19 23:14  fs_雪花  阅读(221)  评论(0)    收藏  举报