packagecom.learn.scala.day11
importscala.beans.BeanProperty
/**
* Scala中类的类型:
*1.object :object是单例的,里面的方法类似于Java的静态方法,可以直接通过类名调用,它也可以成为class的伴生类
* 2.class :与Java 的class类似,但是Scala的类可以拥有一个同名的伴生类
* 3.trait;类似Java 的接口。
* Created by zhuqing on 2017/3/3.
*/
objectDay11Class {
/**
* main 方法程序的入口,与Java相同
*
*@param args
*/
defmain(args: Array[String]): Unit = {
//可以直接调用object中公开方法
Person.helloWorld()
//使用伴生类创建对象,实际上是调用了伴生类的apply方法
valperson =Person("11-01","Robbie");//==Person.apply("11-01","Robbie");
person.fly
//Flyable中默认实现的方法
person.descripation()
println(person.flyable)
}
}
/**
*
*使用extends关键词继承抽象类
* 可以使用with关键词实现多个特质
*@param id
*@param name
*/
classPerson(@BeanPropertyid:String,@BeanPropertyname:String)extendsAnimalwithRunnablewithSerializable{
/**
* 实现Flyable中的方法
* 实现方法时必须使用override关键词
*/
override deffly: Unit = {
println("flying");
}
/**
*重写Flyable中的方法
* 重写方法时必须使用override关键词
*@return
*/
override defflyable: Boolean ={
if(this.id.startsWith("11")){
true
}else{
false
}
}
override defspeak: Unit = {
println("person speak")
}
override defrun: Unit = {
println("person run")
}
override defshit: Unit = {
println("person shit")
}
}
/**
* 为 Person的伴生类 ,这个伴生类是单例的
*/
objectPerson {
/**
* object中的方法,类似于Java的静态方法,可以使用类名直接调用
*/
defhelloWorld(): Unit = {
println("hello world")
}
/**
* apply 在使用伴生类创建对象时默认调用,如
* var person = Person(id,name)
*
*@param id
*@param name
*@return
*/
defapply(id:String, name:String): Person =newPerson(id, name)
defapply(id:String): Person =newPerson(id,"no name")
}
/**
* 可飞行的特质,类似于Java的接口(Java接口也可以实现默认方法)
*/
traitFlyable {
/**
* 需要被实现的方法
*/
deffly
/**
* 默认值方法
*
*@return
*/
defflyable: Boolean = {
true
}
/**
* Trait中可实现默认方法
*/
defdescripation(): Unit = {
println(" I can fly!")
}
}
/**
* 跑步的特特质
*/
traitRunnable{
defrun
}
/**
* abstract与trait非常相似,它们之间的不同点,与Java8中的抽象类与接口的不同点一样:
* 一个类只能实现一个abstract,但是可以实现多个trait
*
* 抽象类,类都可以使用extends关键词实现特质
* 用with实现多个特质
*/
abstract classAnimalextendsFlyablewithCloneable{
/**
* 吃的默认方法
*/
defeat: Unit ={
println("eating")
}
/**
* 睡的默认方法
*/
def sleep: Unit ={
println("sleeping")
}
/**
* 说的抽象方法
*/
def speak
/**
* 拉的抽象方法
*/
def shit
}