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],表示只能在当前类访问,伴生对象也不能直接访问。

 

posted @ 2025-02-07 13:46  七安。  阅读(13)  评论(0)    收藏  举报