2023學年完整公開課版scala類和對象_第1頁
2023學年完整公開課版scala類和對象_第2頁
2023學年完整公開課版scala類和對象_第3頁
2023學年完整公開課版scala類和對象_第4頁
2023學年完整公開課版scala類和對象_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

scala類和對象2知識目標Scala各類數(shù)組的學習01能力目標掌握Scala各類數(shù)組的使用和定義02學習目標3目錄0102初識類和對象類03對象初識類和對象4Scala的類與Java的類具有非常多的相似性,示例代碼如下://1.在scala中,類不需要用public聲明,所有的類都具有公共的可見性classPerson{//2.聲明私有變量,用var修飾的變量默認擁有getter/setter屬性privatevarage=0//3.如果聲明的變量不需要進行初始賦值,此時Scala就無法進行類型推斷,所以需要顯式指明類型privatevarname:String=_//4.定義方法,應指明傳參類型。返回值類型不是必須的,Scala可以自動推斷出來,但是為了方便

調用者,建議指明defgrowUp(step:Int):Unit={age+=step}初識類和對象5//5.對于改值器方法(即改變對象狀態(tài)的方法),即使不需要傳入?yún)?shù),也建議在聲明中包含()defgrowUpFix():Unit={age+=10}//6.對于取值器方法(即不會改變對象狀態(tài)的方法),不必在聲明中包含()defcurrentAge:Int={age}/***7.不建議使用return關鍵字,默認方法中最后一行代碼的計算結果為返回值

*如果方法很簡短,甚至可以寫在同一行中

*/defgetName:String=name}變長數(shù)組6//伴生對象objectPerson{defmain(args:Array[String]):Unit={//8.創(chuàng)建類的實例valcounter=newPerson()//9.用var修飾的變量默認擁有getter/setter屬性,可以直接對其進行賦值counter.age=12counter.growUp(8)counter.growUpFix()//10.用var修飾的變量默認擁有getter/setter屬性,可以直接對其進行取值,輸出:30println(counter.age)//輸出:30println(counter.currentAge)//輸出:nullprintln(counter.getName)}}類-成員變量可見性7Scala中成員變量的可見性默認都是public,如果想要保證其不被外部干擾,可以聲明為private,并通過getter和setter方法進行訪問。類-getter和sette屬性8getter和setter屬性與聲明變量時使用的關鍵字有關:使用var關鍵字:變量同時擁有getter和setter屬性;使用val關鍵字:變量只擁有getter屬性;使用private[this]:變量既沒有getter屬性、也沒有setter屬性,只能通過內部的方法訪問;需要特別說明的是:假設變量名為age,則其對應的get和set的方法名分別叫做

age

age_=。代碼如下:Getter和sett屬性9classPerson{privatevalname="heibaiying"privatevarage=12private[this]varbirthday="2019-08-08"http://birthday只能被內部方法所訪問defgetBirthday:String=birthday}objectPerson{defmain(args:Array[String]):Unit={valperson=newPersonperson.age=30println()println(person.age)println(person.getBirthday)}}示例代碼中

person.age=30

在執(zhí)行時內部實際是調用了方法

person.age_=(30)

,而

person.age

內部執(zhí)行

時實際是調用了

person.age()

方法。主構造器10和Java不同的是,Scala類的主構造器直接寫在類名后面,但注意以下兩點:主構造器傳入的參數(shù)默認就是val類型的,即不可變,你沒有辦法在內部改變傳參;寫在主構造器中的代碼塊會在類初始化的時候被執(zhí)行,功能類似于Java的靜態(tài)代碼塊

static{}代碼如下:主構造器11classPerson(valname:String,valage:Int){println("功能類似于Java的靜態(tài)代碼塊static{}")defgetDetail:String={//name="heibai"無法通過編譯name+":"+age}}objectPerson{defmain(args:Array[String]):Unit={valperson=newPerson("heibaiying",20)println(person.getDetail)}}classPerson(valname:String,valage:Int){println("功能類似于Java的靜態(tài)代碼塊static{}")defgetDetail:String={//name="heibai"無法通過編譯name+":"+age}}objectPerson{defmain(args:Array[String]):Unit={valperson=newPerson("heibaiying",20)println(person.getDetail)}}輸出:功能類似于Java的靜態(tài)代碼塊static{}輸出結果:heibaiying:20輔助構造器12輔助構造器有兩點硬性要求:輔助構造器的名稱必須為this;每個輔助構造器必須以主構造器或其他的輔助構造器的調用開始。classPerson(valname:String,valage:Int){privatevarbirthday=""http://1.輔助構造器的名稱必須為thisdefthis(name:String,age:Int,birthday:String){//2.每個輔助構造器必須以主構造器或其他的輔助構造器的調用開始this(name,age)this.birthday=birthday}//3.重寫toString方法overridedeftoString:String=name+":"+age+":"+birthday}objectPerson{defmain(args:Array[String]):Unit={println(newPerson("heibaiying",20,"2019-02-21"))}}方法傳參不可變13在Scala中,方法傳參默認是val類型,即不可變,這意味著你在方法體內部不能改變傳入的參數(shù)。這和Scala的設計理念有關,Scala遵循函數(shù)式編程理念,強調方法不應該有副作用,參考代碼如下:classPerson(){deflow(word:String):String={word="word"http://編譯無法通過word.toLowerCase}}對象14Scala中的object(對象)主要有以下幾個作用:因為object中的變量和方法都是靜態(tài)的,所以可以用于存放工具類;可以作為單例對象的容器;可以作為類的伴生對象;可以拓展類或特質;可以拓展Enumeration來實現(xiàn)枚舉工具類&單例&全局靜態(tài)常量&拓展特質15這里我們創(chuàng)建一個對象

Utils,代碼如下objectUtils{/**1.相當于Java中的靜態(tài)代碼塊static,會在對象初始化時候被執(zhí)行

*這種方式實現(xiàn)的單例模式是餓漢式單例,即無論你的單例對象是否被用到,

*都在一開始被初始化完成

*/valperson=newPerson//2.全局固定常量等價于Java的publicstaticfinalvalCONSTANT="固定常量"http://3.全局靜態(tài)方法deflow(word:String):String={word.toLowerCase}}工具類&單例&全局靜態(tài)常量&拓展特質16其中Person類代碼如下:classPerson(){println("Person默認構造器被調用")}工具類&單例&全局靜態(tài)常量&拓展特質17新建測試類,代碼如下://1.ScalaApp對象擴展自traitAppobjectScalaAppextendsApp{//2.驗證單例println(Utils.person==Utils.person)//3.獲取全局常量println(Utils.CONSTANT)//4.調用工具類println(Utils.low("ABCDEFG"))}//輸出如下:Person默認構造器被調用true固定常量abcdefg伴生對象18在Java中,你通常會用到既有實例方法又有靜態(tài)方法的類,在Scala中,可以通過類和與類同名的

伴生對象來實現(xiàn)。類和伴生對象必須存在與同一個文件中,代碼如下:classPerson(){privatevalname="HEIBAIYING"defgetName:String={//調用伴生對象的方法和屬性Person.toLow(Person.PREFIX+name)}

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論