scala類和物件
- //類和物件
- /*
- 1.scala中的類不宣告為public(預設為public)
- 2.一個scala原始檔中可以有多個類
- 3.scala不允許類保護靜態元素,類似的功能是成為"單例物件"的物件
- 4.單例物件使用object關鍵字,單例物件叫做這個物件的伴生物件,相應的類叫做伴生類
- 5.伴生類和伴生物件要放在同一檔案中,可以互相訪問對方的私有成員
- 6、單例物件會在第一次使用的時候初始化一次
- 7、使用object的非單例物件叫做獨立物件,通常作為程式的入口
- 8.scala使用類引數,scala編譯器會編譯scala類定義包含的任何不屬於類成員和類方法的其他程式碼,這些程式碼作為類的主建構函式
- 9.除主建構函式之外的建構函式都稱為輔助建構函式,使用this(...)來定義輔助建構函式,所有輔助建構函式最終都會呼叫主建構函式
- */
- /*import scala.collection.mutable.Map
- object Test{
- def main(args:Array[String]){
- println(ChecksumAccumulator.calculate("welcome to scala"))
- }
- }
- //建立一個計算整數累計校驗和的類
- class ChecksumAccumulator{
- private var sum=0;
- def add(b:Byte):Unit=sum+=b
- def checksum():Int= ~ (sum & 0xFF) + 1
- }
- //建立ChecksumAccumulator單例物件
- object ChecksumAccumulator{
- private val cache=Map[String,Int]()
- def calculate(s:String):Int={
- if(cache.contains(s))
- cache(s)
- else
- {
- val acc=new ChecksumAccumulator
- for(c<-s)
- acc.add(c.toByte)
- val cs=acc.checksum()
- cache +=( s -> cs )
- cs
- }
- }
- }*/
- /*
- //深入理解伴生物件
- object Companion{
- def show=println("I am a companion")
- }
- class Companion{
- def shout=Companion.show
- }
- //反編譯Companion.class得到以下內容
- public class Companion extends java.lang.Object implements scala.ScalaObject{
- public static final void show()
- public Companion()
- public void shout()
- }
- //即伴生物件和它對應的類在位元組碼層面走到了一起,換句話說,在Scala裡面的class和Object在java層面裡面合二為一
- */
- //下面定義一個有理數的類來介紹scala類定義的幾個特徵:類引數、建構函式、方法、操作符、私有成員、過載、過濾、條件檢查、引用自身
- //有理數定義:n/d,n和d都是整數,d不為0,並且支援有理數的規範表示,如2/10,規範表示為1/5,分子和父母的最小公倍數為1
- /*class Rational(n:Int,d:Int){ //n和d都是類引數,不能使用例項呼叫他們
- println("Created "+n+"/"+d)
- }
- new Rational(1,2)//列印Created 1/2,即編譯器會編譯scala類定義包含的任何不屬於類成員和類方法的其他程式碼,這些程式碼作為類的主建構函式
- //重新定義類的toString()方法
- class Rational(n:Int,d:Int){
- override def toString()=n+"/"+d
- }
- //前提條件檢查:scala會自動載入Predef物件,他有一個require方法,保證傳入建構函式的引數的限制範圍
- class Rational(n:Int,d:Int){
- require(d!=0)
- override def toString()=n+"/"+d
- }
- */
- //新增成員變數:需要實現兩個有理數相加的效果
- /*class Rational(n:Int,d:Int){
- require(d!=0)
- val number=n//類成員變數
- val denom=d//類成員變數
- override def toString()=n+"/"+d
- def add(that:Rational):Rational={
- new Rational(number*that.denom+that.number*denom,denom*that.denom)
- }
- }
- //自身引用
- def lessThan(that:Rational)={
- this.number*that.denom<that.number*this.denom//其中的this可以省略
- }
- //輔助建構函式: 這裡如果定義一個整數,就沒必要指明分母,此時整數本身就是一個有理數
- def this(n:Int)=this(n,1)
- //私有成員變數和方法:需要求分子和分母的最大公倍數的私有方法gcd,同時使用一個私有變數g來儲存最大公倍數
- class Rational(n:Int,d:Int){
- require(d!=0)
- private val g=gcd(n.abs,d.abs)
- val number=n/g //類成員變數
- val denom=d/g //類成員變數
- def this(n:Int)=this(n,1)
- override def toString()=n+"/"+d
- def add(that:Rational):Rational={
- new Rational(number*that.denom+that.number*denom,denom*that.denom)
- }
- private def gcd(a:Int,b:Int):Int={
- if(b==0) a else gcd(b,a%b)
- }
- }
- //定義運算子:之前兩個數的加法可以寫成X.add(Y)或者X add Y,可以定義+,這樣可以直接X+Y
- class Rational(n:Int,d:Int){
- require(d!=0)
- private val g=gcd(n.abs,d.abs)
- val number=n/g //類成員變數
- val denom=d/g //類成員變數
- def this(n:Int)=this(n,1)
- override def toString()=n+"/"+d
- def +(that:Rational):Rational={
- new Rational(number*that.denom+that.number*denom,denom*that.denom)
- }
- def *(that:Rational)={
- new Rational(number*that.number,denom*that.denom)
- }
- private def gcd(a:Int,b:Int):Int={
- if(b==0) a else gcd(b,a%b)
- }
- }
- //方法過載:比如對於Rational物件,+的物件也可以為一個Int物件
- def +(i:Int)=new Rational(number+i*denom,denom)
- //隱式型別轉化:上面定義了Rational的加法,並過載了+以支援整數,r+2,當我們需要2+r怎麼辦?這時就需要隱式型別轉化了
- //scala通過implicit def來定義一個隱式型別轉化,對2+r的2進行自動呼叫該方法,把整數轉為Rational資料型別
- implicit def intToRational(x:Int)=new Rational(x)*/
相關文章
- Scala 類和物件物件
- Scala 學習筆記(2)之類和物件筆記物件
- Scala的類、屬性、物件欄位物件
- Scala學習(六)---Scala物件物件
- Scala(四):物件物件
- Scala類的屬性以及物件私有欄位物件
- 物件和類物件
- 類和物件物件
- Scala學習 2 Scala物件導向物件
- scala物件導向物件
- Scala可變物件物件
- Scala單例物件、伴生物件單例物件
- Java 物件和類Java物件
- 類和物件(中)物件
- Java 類和物件Java物件
- Java物件和類Java物件
- 類和物件案例物件
- Scala學習(五)---Scala中的類
- Scala呼叫Java類Java
- c++類和物件C++物件
- 類圖和物件圖物件
- 認識類和物件物件
- 【Kotlin】類和物件Kotlin物件
- 6.類和物件物件
- C++ 類和物件C++物件
- 複習JAVA面相物件(類和物件)Java物件
- C++類和物件是什麼?C++類和物件詳解C++物件
- 第10章 物件和類——物件和類(六) 抽象資料型別物件抽象資料型別
- Scala:數字是物件,函式也是物件!物件函式
- 探索Scala(3)-- 單例物件單例物件
- 3.java類和物件Java物件
- Java 學習:物件和類Java物件
- 前端進階-類和物件前端物件
- Java基礎| 類和物件Java物件
- 4、類和物件—封裝物件封裝
- cpp中的類和物件物件
- 初識Java類和物件Java物件
- [C++]類和物件(一)C++物件