Last active
August 29, 2015 14:02
-
-
Save johnelf/699a14d0bbbdc614f2d4 to your computer and use it in GitHub Desktop.
Scala类型系统
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Pen { | |
def getInfo = "a pen" | |
} | |
class Chalk extends Pen { | |
override def getInfo = "a pencil that can be erased by eraser" | |
} | |
class WhiteBoardPen extends Pen { | |
override def getInfo = "a white board pen that can write on window wall" | |
} | |
class Board[-T] { | |
def show[U <: T](pen: U) = pen match { | |
case p: Pen => println(s"writing with ${p.getInfo}") | |
case _ => println("can not write") | |
} | |
} | |
class Teacher[T] { | |
def teachLessons(board: Board[T], pen: T) = board.show(pen) | |
} | |
val teacher = new Teacher[Chalk] | |
teacher.teachLessons(new Board[Pen], new Chalk) | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class ProgrammingLanguage { | |
def getInfo = "ProgrammingLanguage" | |
} | |
class ObjectOrientedLanguage extends ProgrammingLanguage { | |
override def getInfo = "SmallTalk" | |
} | |
class Java extends ProgrammingLanguage { | |
override def getInfo = "Java" | |
} | |
class Book[+T] (val content: T) | |
def read(a: Book[ProgrammingLanguage]) = { | |
println(s"""reading a book of ${a.content.getInfo}""") | |
} | |
val pl = new Book[ProgrammingLanguage](new ProgrammingLanguage) | |
val java = new Book[Java](new Java) | |
val smallTalk = new Book[ObjectOrientedLanguage](new ObjectOrientedLanguage) | |
read(pl) | |
read(java) | |
read(smallTalk) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class ProgrammingLanguage { | |
def getInfo = "ProgrammingLanguage" | |
} | |
class ObjectOrientedLanguage extends ProgrammingLanguage { | |
override def getInfo = "SmallTalk" | |
} | |
class Java extends ProgrammingLanguage { | |
override def getInfo = "Java" | |
} | |
class Book[T] (val content: T) | |
def read(a: Book[ProgrammingLanguage]) = { | |
println(s"""reading a book of ${a.content.getInfo}""") | |
} | |
val pl = new Book[ProgrammingLanguage](new ProgrammingLanguage) | |
val java = new Book[Java](new Java) | |
val smallTalk = new Book[ObjectOrientedLanguage](new ObjectOrientedLanguage) | |
read(pl) | |
read(java) | |
read(smallTalk) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment