文章目录

  • ​​类​​
  • ​​创建类的基本语法​​
  • ​​创建对象语法​​
  • ​​注意事项​​
  • ​​成员变量/属性​​
  • ​​注意事项​​
  • ​​底层原理​​
  • ​​方法​​

Scala语言来自于java,天生就是面向对象的语言,且Scala是纯粹的面向对象的语言, 在Scala中一些皆对象

创建类的基本语法

[修饰符] class 类名{
类体
}

示例:

class Cat{
//定义三个属性
var name:String="";//初始化值为 “”
var age:Int =_;//给age 复制为该类型的默认取值,Int 默认值是0
var color:String =_;//给color 赋值为默认值 ""
}

创建对象语法

var|val 变量名[:类型]= new 类型()

var c:Cat= new Cat

注意事项

1)如果对象的引用不会改变(只会改变对象的属性值) 则变量声明为 val 否则声明为 var
2) scala 中 变量声明类型可以省略(会根据new 的类名自动设置 变量类型),但是 如果声明的类型和new 的类型不一致时(有继承关系)必须声明类型
3)scala中类默认为public
4)一个文件中可以有多个类且默认都是public

成员变量/属性

注意事项

1)属性定义方法同成员变量 [修饰符] var 属性名称[:类型]=属性值
2)属性可以定义为任意类型
3)Scala中属性声明后必须显式初始化
4)如果赋值为null 一定要声明类型 否则 该属性类型被默认为Null
5)定时属性时如果暂时不想初始化,可以使用_ 来为变量分配默认值
6) 当我们声明了 var name:String 时,在底层java类中生成 private name 属性
同时会生成两个public 方法 :
name() (类似 java中的get**方法)和 public name_KaTeX parse error: Expected group after '_' at position 63: …调用对应java类的c.age_̲seq(10)方法
同理 调用c.age 时,其实是调用对应java类的c.age() 方法

底层原理

创建上述Cat类后 scala编译器会在底层自动生成对应的java类 ,到target目录下可以看到一个Cat.class 文件,反编译后内容如下:

class Cat {
private var name: String = ""
private var age: Int = 0
private var color: String = null
def name: String = { return this.name
}
def name_$eq(x$1: String): Unit = { this.name = x$1
}
def age: Int = { return this.age
}
def age_$eq(x$1: Int): Unit = { this.age = x$1
}
def color: String = { return this.color
}
def color_$eq(x$1: String): Unit = { this.color = x$1
}
}

方法

scala中方法其实就是函数,语法: def 方法名(参数列表)[:返回类型]={方法体}
示例如下:

class Dog{

def sum(a:Int,b:Int):Int={
a+b;
}
}