@amoszhou
2014-05-12T13:49:17.000000Z
字数 1065
阅读 1118
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 : Int
val 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 _ => ...
}