scala类和对象

42 阅读2分钟

你有没有想过scala中语言的设计逻辑 ,为什么要在这么写,本章主要正确使用scala中的类 辅助构造函数和构造函数的设计思想 了解面向对象,事情简单化

(一)class 类

类是属性行为的集合

  1. 属性也叫成员变量:名词,用来描述事物的外在特征
  2. 行为也叫成员方法:动词,表示事物能做什么
  3. 在Scala中,用class来创建类,用new来创建对象

(二)this关键字链式风格

格式:对象.方法1().方法2().方法3()...

(三)辅助构造函数

  • 构造函数可以有多个,其他的叫辅助构造函数 格式

  • 辅助构造器的方法名固定为this,其参数不能使用var或val修饰,且必须在第一行代码中直接或间接调用主构造器

eg1:

    // 类是属性的集合
    // Student. 构造函数用来创建对象的
    // 辅助构造函数,提供多种创建对象的方式
    class Student(var name: String, var age: Int) {
        println("构造函数被调用...")

        def sayHi(): Unit = {
            println(s"我是${name}, 我今年${age}")
        }

        // 辅助构造函数
        // (1)它的名字就是this
        // (2) 它内部的第一句代码就必须是调用 主构造函数 this("无名氏",0)
        def this() = {
            this("无名氏", 0)
            println("辅助构造函数1被调用...")
        }

        def this(name: String) = {
            this(name, 0)
            println("辅助构造函数2被调用...")
        }
    }
    
    object run5 {
        def main(args: Array[String]): Unit = {
            // 创建一个学生对象
            // val stu1 = new Student("小花", 18)
            // 调用对象的方法
            // stu1.sayHi()
            // stu1.age = 19
            // 调用对象的方法
            // stu1.sayHi()

            // 这里没有设置参数。它会调用辅助构造函数
            // val stu2 = new Student()
            // stu2.sayHi()

            // 这里设置了一个参数。它会调用辅助构造函数
            val stu3 = new Student("小明")
            stu3.sayHi()
        }
}

(四)私有方法

eg2:

object run5 {
    //私有
    class Student(var name: String, var age: Int ){

    //在方法前面添加private 那这个方法是是私有的,class的外部被访问
    private def song(): Unit = {
        println("我在唱歌.....")
    }

    def sayHi(): Unit = {
        println(s"我是${name}, 我今年${age}")
        //私有方法,在类的内部是可以正常调用的
        song()
    }
}


        def main(args: Array[String]): Unit = {

            val stu3 = new Student("小明", 18)
            stu3.sayHi()
        //stu3.song() //会报错

    }
}

(五)单例对象

eg3:

//object 对象
//单例对象,直接使用object来定义。 不能用new
//单例对象,只有一个,不能通过new来生成多个。它一般用来存放工具方法,常理...

object  Tools {
    val PI=3.1415

    def doubleN(n:Int):Int={
        n*2
    }
}

object basic60 {
    def main(args:Array[String]):Unit={
        val rst =Tools.PI * Tools.doubleN(2)//12.56
        println(s"rst=${rst}")
    }

}
  • 完结撒花 !!!!!!!!!!
  • 制作不易 希望·一键三连 在此感谢关注的粉丝宝宝
  • 新来的宝宝可以关注下主播哟!!!!!