[关闭]
@amoszhou 2014-05-12T13:49:17.000000Z 字数 1065 阅读 1118

继承

scala


1.扩展类

仍然使用extends关键字。

  1. class Employee extends Person{}

2.protected

protected关键字与java中的不同,在scala中protected修饰的成员,只能子类可见,同包都是不可见的。

3.超类的构造

关于类的构造器,我们已经上一章已经讲过,这样就会有一个后果:辅助构造器永远不可能会调用到超类构造器。所以只能通过构造器来进行调用。语法:

  1. class Employee(name : String , age : Int, val salary : Double) extends Person(name,age){}

4.重写方法和字段

显式加上override关键字,比如:

  1. class Person{
  2. override def toString() ="this is person tostring method"
  3. }

如果就一个方法不带参,那么可以直接用val来重写。比如上面的toString可以这样重写:

  1. class Person{
  2. override val toString ="this is person tostring method"
  3. }

重写一个字段和重写无参方法一样。直接用override val anme = "secret
主要规则如下:

5.抽象类

与java一样,直接用abstract来修饰类。来一个demo:

  1. abstract class Person(val name: String){
  2. def id :Int //没有方法体,因此是一个抽象方法
  3. }

注意:抽象方法不需要用abstract关键字,只需要省去其方法体就行。在子类中重写超类的抽象方法时,不需要使用override关键字

6.抽象字段

抽象字段就是一个没有初始值的字段,比如:

  1. abstract class Person{
  2. val id : Int
  3. val name : String
  4. }

具体的子类则必须提供具体的值。如:

  1. class Employee(val id : Int) extends Person{
  2. var name = ""
  3. }

7.类型检查和转换

主要就2个方法isInstanceOfasInstanceOf,相当于java中的instanceOf和强制转换,例如:

  1. if(p.isInstanceOf[Employee]){
  2. val s = p.asInstanceOf[Employee]
  3. }

要注意是[]而不是()。不过更好的做法就是模式匹配(match)

  1. p match{
  2. case s: Employee => ...
  3. case _ => ...
  4. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注