抽象属性和抽象方法
基本语法
- 定义抽象类:abstract class Person{} //通过 abstract 关键字标记抽象类
- 定义抽象属性:val|var name:String //一个属性没有初始化,就是抽象属性
- 定义抽象方法:def hello():String //只声明而没有实现的方法,就是抽象方法
案例实操
Scala
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
。
案例实操
Scala
//(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:获取对象的类名。
案例实操
Scala
trait PersonTrait {
// 声明属性
var name:String = _
// 声明方法
def eat():Unit={
}
// 抽象属性
var age:Int
// 抽象方法
def say():Unit
}
定义新类型
type 关键字 :使用 type
关键字可以定义新的数据类型名称,本质上就是类型的一个别名。
Scala
object Test {
def main(args: Array[String]): Unit =
{ type S=String
var v:S="abc"
def test():S="xyz"
}
}