日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Scala基础知识笔记2

發(fā)布時(shí)間:2025/3/8 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Scala基础知识笔记2 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?

?

1 類

1.1 定義一個(gè)簡(jiǎn)單的類

1.2 field的getter 和 setter方法

感覺(jué)成員變量定義成? var 屬性名=屬性值即可,? 不需要定義成 val 或者 private就行,

// ---------------------- 自定義類 和 屬性 get set方法-------------------------------------------------/* class HelloWorld {var name="zm" // 自動(dòng)生成get set方法, 如果屬性是private 那么生成的get set方法也是privateval age = 32 // val類型的成員變量只提供get方法 不提供set方法 比如調(diào)用 對(duì)象.age=34會(huì)報(bào)錯(cuò)def sayHello(name:String) {println("hi: " + name)}def getName = name}val hello = new HelloWorld//println(hello.getName) // 如果定義的方法沒(méi)有括號(hào) 那么調(diào)用時(shí)也不能帶括號(hào)//println(hello.sayHello("ping"))//println(hello.name) get方法獲取屬性值//hello.name="ping" set方法設(shè)置屬性值// println(hello.name)println(hello.age)// hello.age=34 // 編譯報(bào)錯(cuò)//hello.love */// 自定義 屬性的 get set方法 Scala的getter和setter方法的命名與java是不同的,是field和field_=的方式/*class Man{private var myname = "zm"def name = "you name is" + myname // get方法def name_=(value:String) { // 自定義 private類型的屬性的 set方法 其中 _=固定寫(xiě)法并且前后不能有空格print("you cannot edit your name!!!")}}/* val man = new Manprintln(man.name) // 調(diào)用屬性 get方法man.name="liang" // 調(diào)用屬性 set方法 */// 屬性是private類型的成員變量 自定義 set方法來(lái)修改屬性值class Man{private var myname = "zm"def name = "you name is" + myname // get方法def updateName(value:String) { // 自定義 private類型的屬性的set方法myname = value}}val man = new Manprintln(man.name)man.updateName("liang")println(man.name)*/// 生成java風(fēng)格的 get set方法 感覺(jué)沒(méi)必要/*import scala.reflect.BeanPropertyclass Student{@BeanProperty var name:String =_class Student(@BeanProperty var name: String)}val s = new Students.setName("leo")println(s.getName())*/

?

1.3 constructor介紹

1.4 內(nèi)部類介紹

// 輔助構(gòu)造函數(shù) 類似 java的構(gòu)造器 /* class Person{var name = ""var age = 0def this(name:String) {this()this.name = name}def this(name:String, age:Int) {this(name:String)this.age = age}}var person = new Person("zm",34)println(person.name)println(person.age)*/// 主構(gòu)造函數(shù) 就是在類名括號(hào)里定義 構(gòu)造函數(shù)需要的形參的寫(xiě)法 /* class Person(val name: String, val age: Int) {println(name + " | " + age)}var person = new Person("zm",32)*/// 內(nèi)部類 import scala.collection.mutable.ArrayBufferclass Class {class Student(val name: String) {}val students = new ArrayBuffer[Student]def getStudent(name: String) = { // 理解為新生報(bào)到new Student(name)}}val c1 = new Classval s1 = c1.getStudent("leo")c1.students += s1

?

1.5 object 靜態(tài)類-繼承-枚舉-object的apply方法

// object 相當(dāng)于靜態(tài)類 存放靜態(tài)field 和 method 工具方法 不能定義接受參數(shù)的constructor// object內(nèi)部不在method內(nèi)的代碼就是 object的constructor object的constructor只會(huì)在其第一次調(diào)用時(shí)執(zhí)行一次 /* object Person{private var eyes = 2println("this is object Person consutror")def getEyes = eyes}println(Person.getEyes)*/// 伴生類和伴生對(duì)象 class類和class同名的object對(duì)象并定義在同一個(gè) .scala文件中,那么彼此是對(duì)方的伴生類好伴生對(duì)象// 特點(diǎn)是互相可以訪問(wèn)對(duì)方的private field屬性/* object Person {private val eyeNum = 2def getEyeNum = eyeNum}class Person(name:String="zm", age:Int=32) {def sayHello = println(name + " | " + age + " have " + Person.getEyeNum + " eyes") // 使用伴生類的私有屬性}val person = new Personperson.sayHello*/// objectjic 繼承 抽象類 /* abstract class Hello(var name:String="zm", var age:Int=32) {def sayHello(name:String):Unit}object Person extends Hello("zm",34) {override def sayHello(name: String) {println("hello " + name )}}Person.sayHello("liang")*/// object的重要方法 apply// 通常在伴生對(duì)象中實(shí)現(xiàn)apply方法,并實(shí)現(xiàn)構(gòu)造伴生類的對(duì)象的功能,而且創(chuàng)建時(shí)通常不使用new Class的方式,使用Class()的方式// 隱士調(diào)用伴生對(duì)象的apply方法, 讓代碼更簡(jiǎn)潔 eg: val a = Array(1,2,3) Array類的伴生對(duì)象的apply方法就實(shí)現(xiàn)了接收可變數(shù)量的參數(shù),并創(chuàng)建一個(gè)Array對(duì)象的功能// 自定義 伴生類和伴生對(duì)象和 apply /* class Person(var name:String){}object Person {def apply(name:String): Unit = {new Person(name)}}*/// 必須定義在 object的main函數(shù)寫(xiě)法 /* object HelloWorld {def main (args: Array[String]){println("hello world")}}*/// scalac xx.scala scala xxx 編譯和運(yùn)行// 使用object實(shí)現(xiàn)枚舉// Scala沒(méi)有直接提供類似于Java中的Enum這樣的枚舉特性,需要用object繼承Enumeration類,并且調(diào)用Value方法來(lái)初始化枚舉值 /* object Season extends Enumeration {val SPRING = Value(0, "spring") // 索引位置 索引值val SUMMER = Value(1, "summer")val AUTUMN = Value(2, "autumn")val WINTER = Value(3, "winter")}println(Season(0)) // 得到 spring這個(gè)value的值println(Season.withName("spring")) // 得到 spring//for (ele <- Season.values) println(ele)for(c<-Season.values) println(c)*/

?

繼承之? override? super? isInstanceof? asInstanceof? 模式匹配判斷對(duì)象類型?

// 繼承中 子類覆蓋父類方法 必須使用 override 子類調(diào)用父類被覆蓋的方法使用 super 關(guān)鍵字/* class Person {private var name = "leo"val age = 32def getName = name}class Student extends Person {private var score = "A"override val age = 34 // 子類可以覆蓋父類 val的變量def getScore = scoreoverride def getName = "Hi, I'm " + super.getName}*/// 父類對(duì)象 指向了子類實(shí)例, 然后父類對(duì)象又想轉(zhuǎn)換為子類 如果對(duì)象是null,則isInstanceOf一定返回false,asInstanceOf一定返回null/* cvar p:Person = new Studentif(p.isInstanceOf[Student]) { // 如果是子類類型//println("p is student")var s:Student = p.asInstanceOf[Student] // 那么強(qiáng)轉(zhuǎn)成子類類型println( p.getClass ) // class com.beijing.App$Student 得到類實(shí)例的真實(shí)類信息println( classOf[Person] ) // class com.beijing.App$Person*/// 使用模式匹配 判斷對(duì)象類型 /* class Personclass Student extends Personval p:Person = new Studentp match {case one:Person => println("i am the Person type")case _ => println("i am unknown type")}*/

?

繼承之子類父類構(gòu)造函數(shù)

// 子類調(diào)用父類的constructor 1 每個(gè)類可以有一個(gè)主constructor 和任意多個(gè)輔助constructor, 而每個(gè)輔助constructor第一行// 都必須是調(diào)用主constructor或者其他輔助constructor, 也就是子類的輔助構(gòu)造函數(shù)第一行是一定不可能調(diào)用主類的構(gòu)造函數(shù)的// 2 只能在子類的主構(gòu)造函數(shù)中調(diào)用父類的構(gòu)造函數(shù), 如果是父類中接收的參數(shù),比如name和age,子類中接收時(shí),就不要用任何val或var來(lái)修飾了,否則會(huì)認(rèn)為是子類要覆蓋父類的field /* class Person(name:String, age:Int)class Student(name:String, age:Int, var sex:Int) extends Person(name, age) {def this(name:String) {// 輔助構(gòu)造函數(shù)調(diào)用主構(gòu)造函數(shù)this(name,0,0)}def this(age:Int,name:String) {// 第一行 調(diào)用其他輔助構(gòu)造函數(shù)this(name)}}*/

?

繼承之 匿名內(nèi)部類 抽象類?

// 匿名內(nèi)部類 定義沒(méi)有名稱的子類并直接創(chuàng)建對(duì)象,將創(chuàng)建的對(duì)象賦予一個(gè)變量, 以及可以將該對(duì)象傳遞給其他函數(shù) /* class Person(val name:String) { // 定義原始類def sayHello = "hello, i am " + name}val p = new Person("zm") { // 匿名內(nèi)部類需要覆蓋主類的方法 因?yàn)槟涿麅?nèi)部類相當(dāng)于主類的子類override def sayHello = "hello, i am" + name}def greeting(p:Person) { // 普通傳參println(p.sayHello)}def greeting1(p:Person{def sayHello:String}) { // 普通傳參println(p.sayHello)}greeting1(p)*/// 抽象類 抽象方法 抽象屬性 子類在繼承過(guò)來(lái)之后 這些類方法屬性都不需要override

?

轉(zhuǎn)載于:https://www.cnblogs.com/chengjianxiaoxue/p/10181786.html

總結(jié)

以上是生活随笔為你收集整理的Scala基础知识笔记2的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。