抽象类:
1.类的一个或者多个方法没有完整的定义
2.声明抽象方法不需要加abstract关键字,只需要不写方法体
3.子类重写父类的抽象方法时不需要加override
4.父类可以声明抽象字段(没有初始值的字段)
5.子类重写父类的抽象字段时不需要加override
例如:
abstract class person1{
def speak
val name : string
var age : int
}
class student1 extends Persion1{
def speak{
println("speak!!!")
}
val name = "AAA"
val age = 100
}
trait:例如:
1.字段和行为的集合
2.混入类中
3.通过with关键字,一个类可以扩展多个特质(trait)
trait logger{
def log(msg : string)
}
trait consolelogger extends logger{ //第一次继承要用extends
def log(msg : string){
println(msg)
}
}
class Test : extends ConsoleLogger{
def test{
log("ppp")
}
}
apply方法:
1.class ApplyTest{
def test{
println("test")
}
}
object ApplyTest{
def apply() = new ApplyTest
def static{
println("i'm a static method")
}
}
object Basic4 extends App{
val a = ApplyTest() //直接调用了apply方法,通过此方法a成为了一个ApplyTest对象
a.test
}
类名加括号表示object的apply方法,对象名加括号表示class的apply方法
包可以在任何地方引入,加个大括号,出了大括号就找不到了。
模式匹配:
1.标准用法(match):例如
//匹配值
val value =3
val result = value match{
case 1 if i ==1 => "one"
case 2 => " two"
case 3 => "three"
cast _ => "i'ont know"
}
//匹配类型
def t(obj : Any) = obj match{
case x : int =>println("int")
case s : string => println("string")
case _ =>println("unknown type"
}
t(1)
1.类的一个或者多个方法没有完整的定义
2.声明抽象方法不需要加abstract关键字,只需要不写方法体
3.子类重写父类的抽象方法时不需要加override
4.父类可以声明抽象字段(没有初始值的字段)
5.子类重写父类的抽象字段时不需要加override
例如:
abstract class person1{
def speak
val name : string
var age : int
}
class student1 extends Persion1{
def speak{
println("speak!!!")
}
val name = "AAA"
val age = 100
}
trait:例如:
1.字段和行为的集合
2.混入类中
3.通过with关键字,一个类可以扩展多个特质(trait)
trait logger{
def log(msg : string)
}
trait consolelogger extends logger{ //第一次继承要用extends
def log(msg : string){
println(msg)
}
}
class Test : extends ConsoleLogger{
def test{
log("ppp")
}
}
apply方法:
1.class ApplyTest{
def test{
println("test")
}
}
object ApplyTest{
def apply() = new ApplyTest
def static{
println("i'm a static method")
}
}
object Basic4 extends App{
val a = ApplyTest() //直接调用了apply方法,通过此方法a成为了一个ApplyTest对象
a.test
}
类名加括号表示object的apply方法,对象名加括号表示class的apply方法
包可以在任何地方引入,加个大括号,出了大括号就找不到了。
模式匹配:
1.标准用法(match):例如
//匹配值
val value =3
val result = value match{
case 1 if i ==1 => "one"
case 2 => " two"
case 3 => "three"
cast _ => "i'ont know"
}
//匹配类型
def t(obj : Any) = obj match{
case x : int =>println("int")
case s : string => println("string")
case _ =>println("unknown type"
}
t(1)