目录
object
单例的对象,里面定义的成员变量 和 方法都是静态的(static),如果要编写和运行main,必须要写在单例对象类中
伴生对象:
当object 的名称和类的名称一致的时候。,这个对象叫着这个类的伴生对象(必须在同一个文件中)
objectName.apply() 和 objectName() 是一样的效果
类的定义 class ClassName
类的主构造器(一个):定义在类的名称后面的构造器,(private val name: String, var age: Int)
类的辅助构造器(多个):定义在类体中,def this(构造参数)类的辅助构造器,在类的辅助构造器中必须先调用类的主构造器
类的成员变量:
var 对外提供了get 和 set方法
val 对外值只提供了get方法
访问权限:
成员变量 private[] 标识外部没法访问它get 或者 set方法
方法 private[] 标识外部没法调用这个方法
构造器 private[] 在外部无法访问
类的 private[包名] 标识这个类在这个包名及其子包下可见(可访问)
private[this] 只能在当前包下可见子包不可见(不能访问)
伴生类和伴生对象可以互相访问私有的成员和方法。 注意:private[this]修饰的不能访问
抽象类
1.通过abstract关键字定义抽象类
2.抽象类中可以定义抽象方法和普通方法
3.抽象方法没有方法体{}
4.在scala中继承抽象类的话,必须使用extends关键字
特质 Trait1.定义特质使用Trait关键字
2.特质相当于java中的Interface, 但是比Interface更强大一些,因为在trait中可以定义抽象方法,trait中也可以定义普通方法
3.如果某一个类或者对象(继承)混入了某一个特质,这个特质中有一个没有实现的方法A,还有一个带有实现方法的B,这个类或者对象必须实现这个没有实现的方法A, 可以重写方法B, 必须使用override关键字
4.单继承,多混入,scala要求有而且仅有一个extends关键字 class LiuTeacher extends Dance with Drive with Serializable{
1.通过case关键字将一个类变成样例类 case class ClassName(属性),样例对象 case object ObjectName
2.case class必须显示声明一个主构造器,隐式的构造一个空的辅助构造器
4.case class不需要new就可以创建对象
5.case class默认混入了序列化特质 ,Serializable,支持模式匹配
模式匹配类似java中的 switch case, 但是比java中的更加强大
val xx = var|val match {
case /字符串/类型/集合/Tuple/样例类/样例对象 if 守卫 => Any
}