46.scala编程思想笔记——抽象类
欢迎转载,转载请标明出处:blog.csdn.net/notbaron/ar…
源码下载连接请见第一篇笔记。\
抽象类就像普通类一样,只是其中的一个或抖个方法或域是不完整的。
Scala延续了java的做法,用abstract关键字来描述抽象类,抽象类包含了未定义的方法或未初始化的域。
例如:
abstract class WithValVar {
val x:Int
var y:Int
}
abstract class WithMethod {
def f():Int
defg(n:Double)
}
对于以抽象类为基础最终创建的类,抽象方法和域必须以某种方式存在于其中。
再如下:
import com.atomicscala.AtomicTest._
abstract class Animal {
deftemplateMethod =
s"The$animal goes $sound"
// Abstractmethods (no method body):
defanimal:String
defsound:String
}
// Error -- abstract class
// cannot be instantiated:
// val a = new Animal
class Duck extends Animal {
def animal ="Duck"
//"override" is optional here:
override defsound = "Quack"
}
class Cow extends Animal {
def animal ="Cow"
def sound ="Moo"
}
(new Duck).templateMethod is
"The Duck goes Quack"
(new Cow).templateMethod is
"The Cow goes Moo"
为来自基类的抽象方法提供定义时,关键字override是可选的。从技术上讲,并没有覆盖;但在scala中,如果某些事物是可选的,就通常会删除它,以减少视觉上的噪声。