语法基础部分
适用场景(编译型)
常量、变量、数据类型、
流程控制、函数(面向函数语言)
面向对象部分
类
抽象类
接口【特质】
三大特性【封装、继承、多态】
类是对象的抽象,而对象是类的具体实例。
类是抽象的,不占用内存,而对象是具体的,占用存储空间。
推荐书目《设计模式之禅》
类:属性,行为
类与类的关系:继承 组合
类与对象的关系:抽象 具体
[访问修饰符] class 类名 { } //类的定义 默认public修饰
[访问修饰符] var|val 属性名称 [:类型] = 属性值 //声明属性
//类型不写的话,编译器根据具体的值进行类型推断
//var的话一般可以使用 _ 系统赋予初始值
/**Byte / Short / Int / Long 0
Float / Double 0.0
String 和 引用类型 null
Boolean false
*/
/**数据类型分为几大类:
* 值类型 【AnyVal】
* 引用类型【AnyRef】
*/
def 方法名(参数)[:返回值类型] = {
方法体
}
//声明方法
方法 和 函数的区别:方法从属于类 ,函数不属于任何类
伴生类和伴生对象
如果有一个class,还有一个与class同名的object,
那么就称这个object是class的伴生对象,
class就是object的伴生类
伴生对象和伴生类必须放在同一个.scala文件中
伴生对象和伴生类,最大特点是可以互相访问private 变量
包
包是对类的精细化管理管理
包的命名规范
数字、字母、下划线、小圆点 、不能数字开头、不要使用关键字
一般命名规范,全部小写字母
机构类型名.公司名.项目名.模块名{在此路径下编写各种类}
包的作用域
如果声明 package包的时候
大括号声明的类在这个包中,声明的类从属于子包
大括号外面声明的类,从属于原有的包
import导入
//import java.util.Date
//import java.sql.{Date=>_} //屏蔽这个类
//类重名的话,如何系统类(_root_)
方法
访问修饰符
scala有多少种访问权限 【4种访问权限、3种访问修饰符】
public 默认就是public权限、scala没有这个关键词【1】
protected 访问权限只能子类访问【0】、同包都不行的【1】
private 只能当前类访问 【1】
private[包修饰] 给包提供权限【1】
构造方法
scala的构造器的基本语法:
class 类名(形参列表){ //主构造器
def this(形参列表) {
//辅助构造器
}
def this(形参列表...) {
//辅助构造器
}
}
/**
* 构造方法
* scala构造方法: 主构造方法、辅助构造方法
* scala创建对象的时候如果用的辅助构造方法,必须调用主构造方法吗??? 需要
* scala主构造方法是无参的,小括号可以省略不写,从这个角度看,类也是一个函数
* scala的辅助构造方法可以用private修饰、当前辅助构造方法就被私有化了
* scala不能存在和主构造方法同名且同参数的辅助构造方法
* /
构造方法
scala构造方法: 主构造方法、辅助构造方法
scala创建对象的时候如果用的辅助构造方法,必须调用主构造方法吗??? 需要
scala主构造方法是无参的,小括号可以省略不写,从这个角度看,类也是一个函数
scala的辅助构造方法可以用private修饰、当前辅助构造方法就被私有化了
scala不能存在和主构造方法同名且同参数的辅助构造方法
抽象类和继承
/**
* 抽象方法和抽象属性 override可选
* 具体的方法和具体的属性如果被重写,必须要添加override
* ??是让我们思考方法具体实现应该怎么写、不是默认值
*/
abstract class Person {
def test()
def test1(): Unit ={
println("person test1 ......")
}
}
class User extends Person {
def test(): Unit = {
println("user test ......")
}
override def test1(): Unit = {//具体的方法和具体的属性如果被重写,必须要添加override
println("user test1 ......")
}
}