46.scala编程思想笔记——抽象类

99 阅读1分钟

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中,如果某些事物是可选的,就通常会删除它,以减少视觉上的噪声。