基础面向对象编程
笔记来自教程:https://www.bilibili.com/video/BV1aP4y1a7uC?p=25
包的声明
Java中package包的语法比较单一,Scala对此进行扩展
- scala同一个源码文件中,包可以多次声明
包名可以和文件路径不一致
在包中声明的类,调用时,导入最后的那个包(从上到下,声明的所有包的路径联合) - scala中所有的语法都能嵌套
包可以使用小括号,小括号之内声明的类在这个包中,小括号之外声明的类不在这个包中,比如下图中的类Emp 就不在包test中
- scala可声明父包和子包,父包中的类,子包可直接访问,不需要引入。
如下图 子包test1 访问 父包test 中的 类Emp 时,不需要引入
- scala 包中可以声明类 但是无法声明变量和函数
- scal为了弥补包的不足,使用了包对象的概念,其中可以声明方法和属性。如下图
import
- 基本语法
Scala中基本的import导入语法和Java完全一致
import java.util.List
import java.util._ // Scala中使用下划线代替Java中的星号 - Scala中的import语法可以在任意位置使用
object ScalaImport{
def main(args: Array[String]): Unit = {
import java.util.ArrayList
new ArrayList()
}
}
- Scala中可以导包,而不是导类
object ScalaImport{
def main(args: Array[String]): Unit = {
import java.util
new util.ArrayList()
}
}
- Scala中可以在同一行中导入多个类,简化代码
import java.util.{List, ArrayList}
- Scala中可以屏蔽某个包中的类(因为不同包中可能存在同名类,未避免导类出错)
import java.util._
import java.sql.{ Date=>_, Array=>_, _ }
- Scala中可以给类起别名,简化使用
import java.util.{ArrayList=>AList}
object ScalaImport{
def main(args: Array[String]): Unit = {
new AList()
}
}
- Scala中可以使用类的绝对路径而不是相对路径(如果自定义包命名时,与scala源代码中类的路径相同,为了区分,可以使用绝对路径)
import _root_.java.util.ArrayList
- 默认情况下,Scala中会导入如下包和对象
import java.lang._
import scala._
Import scala.Predef
类
- 基本语法
// 声明类:访问权限 class 类名 { 类主体内容 }
class User {
}
// 对象:new 类名(参数列表)
new User()
- 扩展语法
Scala中一个源文件中可以声明多个类
属性
- 基本语法
class User {
var name : String = _ // 类属性其实就是类变量
var age : Int = _ // 下划线表示类的默认初始化
}
- 扩展语法
Scala中的属性其实在编译后也是方法,也就是说它可以自动生成类似java的get set方法 (取值放值方法,在java中需要手动定义)
class User {
var name : String = _
val age : Int = 30
private val email : String = _
@BeanPropetry var address : String = _
}
访问权限
Scala中的访问权限和Java中的访问权限类似,但是又有区别:
private : 私有访问权限,只能当前类访问
private[包名]: 包访问权限
Protected : 受保护权限 (只能子类访问,同包访问不了)
(public是默认的访问权限 没有关键字)
方法
scala中类的方法 其实就是函数,就是使用方式不同,方法必须使用对象调用
object ScalaMethod{
def main(args: Array[String]): Unit = {
val user = new User
user.login("zhangsan", "000000")
}
}
class User {
def login( name:String, password:String ): Boolean = {
false
}
}
对象
Scala中的对象和Java是类似的
val | var 对象名 [:类型] = new 类型()
var user : User = new User()
构造方法
分为 主构造方法和辅助构造方法
定义:
在类后面声明的构造方法就是主构造方法
在主构造方法中声明的构造方法就是辅助构造方法
class User(name:String){
//类体 & 构造方法体
//声明辅助构造方法
def this{
this("zhangsan") //必须调用主构造方法
}
}