抽象属性和抽象方法
基本语法
- 定义抽象类:abstract class Person{} //通过 abstract 关键字标记抽象类
- 定义抽象属性:val|var name:String //一个属性没有初始化,就是抽象属性
- 定义抽象方法:def hello():String //只声明而没有实现的方法,就是抽象方法
案例实操
abstract class Person {val name: String def hello(): Unit
}val name: String = "teacher" def hello(): Unit = {println("hello teacher")}
}
单例对象(伴生对象)
单例对象:Scala 中没有静态的概念,但提供了单例对象来模拟类对象。若单例对象名与类名一致,则称为该类的伴生对象。
伴生对象语法:使用 object
关键字声明,伴生对象对应的类称为伴生类。
apply 方法:通过伴生对象的 apply
方法,可以实现不使用 new
关键字创建对象。如果想让主构造器私有,可以在 ()
前加 private
。
案例实操
//(1)伴生对象采用 object 关键字声明
object Person {var country: String = "China"
}//(2)伴生对象对应的类称之为伴生类,伴生对象的名称应该和伴生类名一致。
class Person {var name: String = "bobo"
}object Test {def main(args: Array[String]): Unit = {//(3)伴生对象中的属性和方法都可以通过伴生对象名(类名)直接调用访
问。println(Person.country)}
}
特质
特质(Trait):Scala 中用特质来代替接口的概念,一个类可以混入(mixin)多个特质。
特质声明:使用 trait
关键字声明,特质中可以包含抽象方法和具体方法。
特质基本语法:一个类继承特质时使用 extends
关键字,如果同时继承多个特质或父类,使用 with
关键字连接。
动态混入:创建对象时混入特质,而无需使类混入该特质。
特质叠加:解决多个混入特质中的方法冲突问题,Scala 采用了特质叠加的策略。
类型检查和转换
类型检查:使用 isInstanceOf[T]
判断对象是否为某个类型,使用 asInstanceOf[T]
将对象强制转换为某个类型。
classOf:获取对象的类名。
案例实操
trait PersonTrait {// 声明属性var name:String = _// 声明方法def eat():Unit={}// 抽象属性var age:Int// 抽象方法def say():Unit
}
定义新类型
type 关键字:使用 type
关键字可以定义新的数据类型名称,本质上就是类型的一个别名。
object Test {def main(args: Array[String]): Unit = { type S=Stringvar v:S="abc"def test():S="xyz"}
}