1.17
构造器
主构造器
语法:
class 类名(var/val 参数名:类型 = 默认值,...){
//构造代码块
}
示例:
object ClassDemo {
class Person(var name:String = "sjh",var age:Int = 24){
}
def main(args: Array[String]): Unit = {
//空参
val p1 = new Person("s",2)
//全参
val p2 = new Person()
//指定参数
val p3 = new Person(age = 2)
}
}
辅助构造器
语法:
辅助构造器方法名必须叫 this。
def this(参数名:类型,...){
//第一行需要调用主构造器或其他构造器
//构造器代码
}
示例:
object ClassDemo {
class Customer(var name:String,var address:String){
def this(array: Array[String]) = {
this(array(0),array(1))
}
}
def main(args: Array[String]): Unit = {
//通过辅助构造器创建对象
val customer = new Customer(Array("sjh", "xi'an"))
}
}
单例对象
定义单例对象和定义类很像,就是把 class 换成 object。
格式:
object 单例对象名{}
在 object 中定义的成员变量类似 Java 中的静态变量,在内存中只有一个对象。
单例对象中,可以直接使用 单例对象名.的方式调用成员。
例如:
object ClassDemo {
object Dog{
val leg_num = 4
}
def main(args: Array[String]): Unit = {
print(Dog.leg_num)
}
}
单例对象中的方法类似 Java 中的静态方法
object ClassDemo {
object Dog{
val leg_num = 4
def say(): Unit = print("dog")
}
def main(args: Array[String]): Unit = {
Dog.say()
}
}
main 方法
在 Java 中 main 方法是静态的,Scala 中没有 main 方法,所以必须将其放在一个单例对象中。
创建单例对象
object ClassDemo {
def main(args: Array[String]): Unit = {
print("hello scala")
}
}
继承 App 特质
object ClassDemo extends App {
print("hello scala")
}
伴生对象
在 Java 中有一些类会同时有静态内容和非静态内容,在 Scala 中想要实现类似效果可以使用伴生对象来实现。
一个 class 和 object 具有相同的名字,这个 object 被称为伴生对象,这个 class 被称为半生类。
伴生对象和半生类可以互相访问 private 属性,必须写在一个源文件。
示例:
object ClassDemo {
//半生类,里面内容非静态
class Person{
def eat(): Unit = print("eat " + Person.food)
}
//伴生对象
object Person{
private val food = "rice"
}
def main(args: Array[String]): Unit = {
val person = new Person
person.eat()
}
}
如果某个成员变量权限为 private[this],表示只能在当前类访问,伴生对象也不能直接访问。

浙公网安备 33010602011771号