@amoszhou
2014-05-12T13:49:17.000000Z
字数 1065
阅读 1248
scala
仍然使用extends关键字。
class Employee extends Person{}
protected关键字与java中的不同,在scala中protected修饰的成员,只能子类可见,同包都是不可见的。
关于类的构造器,我们已经上一章已经讲过,这样就会有一个后果:辅助构造器永远不可能会调用到超类构造器。所以只能通过构造器来进行调用。语法:
class Employee(name : String , age : Int, val salary : Double) extends Person(name,age){}
显式加上override关键字,比如:
class Person{override def toString() ="this is person tostring method"}
如果就一个方法不带参,那么可以直接用val来重写。比如上面的toString可以这样重写:
class Person{override val toString ="this is person tostring method"}
重写一个字段和重写无参方法一样。直接用override val anme = "secret
主要规则如下:
与java一样,直接用abstract来修饰类。来一个demo:
abstract class Person(val name: String){def id :Int //没有方法体,因此是一个抽象方法}
注意:抽象方法不需要用abstract关键字,只需要省去其方法体就行。在子类中重写超类的抽象方法时,不需要使用override关键字。
抽象字段就是一个没有初始值的字段,比如:
abstract class Person{val id : Intval name : String}
具体的子类则必须提供具体的值。如:
class Employee(val id : Int) extends Person{var name = ""}
主要就2个方法isInstanceOf和asInstanceOf,相当于java中的instanceOf和强制转换,例如:
if(p.isInstanceOf[Employee]){val s = p.asInstanceOf[Employee]}
要注意是[]而不是()。不过更好的做法就是模式匹配(match)
p match{case s: Employee => ...case _ => ...}