Scala 类
Scala 類(lèi)
簡(jiǎn)單類(lèi)和無(wú)參方法
class HelloWorld {private val value = 0def increment(): Int = value + 1def current(): Int = valuedef printValue: Unit = println(value) }val helloWorld = new HelloWorld() helloWorld.current() helloWorld.increment() helloWorld.printValue helloWorld.increment helloWorld.printValue注意
類(lèi)不聲明為public,一個(gè)Scala源文件可以包含多個(gè)類(lèi)。所有的這些類(lèi)都具有公有可見(jiàn)性。調(diào)用無(wú)參方法時(shí),可以加()也可以不加;如果方法定義中不帶括號(hào),那么就不能帶括號(hào)。
Getter、Setter方法
- get方法的名字就是字段的名字,set方法名字為字段名稱(chēng)加下劃線age_使用時(shí)age=即可
- 如果字段是私有的,那么getter和setter方法也是私有的
- 如果字段為val聲明的常量,那么只會(huì)生成get方法
- 如果你不需要任何get和set方法可以將字段聲明為 private
對(duì)象私有字段
對(duì)象的私有字段不生成getter和setter方法
Bean屬性
Javabeans規(guī)范定義了Java的屬性是像 getXxx()和 setXxx()的方法,許多java的工具都依賴(lài)這個(gè)命名習(xí)慣,為了java互操作性,將Scala字段加@BeanProperty時(shí),這樣的方法會(huì)自動(dòng)生成
import scala.beans.BeanPropertyclass HelloWorld {@BeanPropertyvar age = 0@BeanPropertyvar name = "upuptop" }val helloWorld = new HelloWorld()println(helloWorld.getAge) println(helloWorld.getName) helloWorld.setName("pyfysf") helloWorld.setAge(20) println(helloWorld.getAge) println(helloWorld.getName)每個(gè)字段生成四個(gè)方法:
- name:String
- name_=(newValue:String):Unit
- getName():String
- setName(newValue:String):Unit
構(gòu)造器
Scala的類(lèi)構(gòu)造器分為主構(gòu)造器和輔助構(gòu)造器。
1.主構(gòu)造器的參數(shù)直接放置在類(lèi)名之后:
2.主構(gòu)造器會(huì)執(zhí)行類(lèi)中定義的所有語(yǔ)句
import scala.beans.BeanPropertyclass Person(@BeanProperty val name: String, private var age: Int) {println("init person")def desc = s"${name} is ${age} years old"def birthday(): Int = {age + 1} }//打印結(jié)果:init person val upuptop = new Person("upuptop", 20)3.可以通過(guò)private設(shè)置主構(gòu)造器的私有屬性
4.如果參數(shù)至少要被一個(gè)方法使用,該參數(shù)自動(dòng)升格為字段,否則改參數(shù)將不被保存為字段
5.輔助構(gòu)造器名稱(chēng)為this,通過(guò)不同參數(shù)進(jìn)行區(qū)分,每個(gè)輔助構(gòu)造器都必須以主構(gòu)造器或者已經(jīng)定義的輔助構(gòu)造器的調(diào)用開(kāi)始。
輔助構(gòu)造器必須先調(diào)用主構(gòu)造器,this()
嵌套類(lèi)
在 Scala中,你幾乎可以在任何語(yǔ)法結(jié)構(gòu)中嵌套任何語(yǔ)法結(jié)構(gòu),在函數(shù)中定義函數(shù),在類(lèi)中定義類(lèi)。Java中的內(nèi)部類(lèi)從屬于外部類(lèi)。 Scala中每一個(gè)實(shí)例都有一個(gè)內(nèi)部類(lèi),內(nèi)部類(lèi)從屬于實(shí)例.
import scala.collection.mutable.ArrayBufferclass Network {private val members = new ArrayBuffer[Network.Member]def join(name: String) = {val m = new Network.Member(name)members += mm}def description = "a network with members " + (for (m <- members) yield m.description).mkString(", ") }object Network {class Member(val name: String) {val contacts = new ArrayBuffer[Member]def description = name + " with contacts " + (for (c <- contacts) yield c.name).mkString(" ")} }val chatter = new Network val myFace = new Networkval fred = chatter.join("Fred") val wilma = chatter.join("Wilma") fred.contacts += wilma // OK val barney = myFace.join("Barney") fred.contacts += barney // Also OK println("chatter is " + chatter.description) println("myFace is " + myFace.description) import scala.collection.mutable.ArrayBufferclass Network(val name: String) { outer => class Member(val name: String) {val contacts = new ArrayBuffer[Member]def description = name + " inside " + outer.name}private val members = new ArrayBuffer[Member]def join(name: String) = {val m = new Member(name)members += mm} }val chatter = new Network("Chatter") val myFace = new Network("MyFace")val fred = chatter.join("Fred") println(fred.description); val barney = myFace.join("Barney") println(barney.description);本博客僅為博主學(xué)習(xí)總結(jié),感謝各大網(wǎng)絡(luò)平臺(tái)的資料。蟹蟹!!
轉(zhuǎn)載于:https://www.cnblogs.com/upuptop/p/11154283.html
總結(jié)
- 上一篇: PJzhang:互联网是有国界
- 下一篇: LeetCode Pancake Sor