成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Scala類(lèi):復(fù)數(shù)類(lèi),無(wú)參方法,繼承和覆蓋

開(kāi)發(fā) 后端
Scala是一門(mén)面向?qū)ο蟮恼Z(yǔ)言,因此它擁有很多關(guān)于“類(lèi)”的描述。本文簡(jiǎn)單介紹了Scala類(lèi)的一些特點(diǎn)。

本文源自Michel Schinz和Philipp Haller所寫(xiě)的A Scala Tutorial for Java programmers,由Bearice成中文。***篇為Scala簡(jiǎn)單做了一下入門(mén),第二篇描述Scala對(duì)象。在這一部分中,將對(duì)Scala類(lèi)進(jìn)行一些介紹。

51CTO編輯推薦:Scala編程語(yǔ)言專(zhuān)題

5 Scala類(lèi)

正如我們所見(jiàn),Scala是一門(mén)面向?qū)ο蟮恼Z(yǔ)言,因此它擁有很多關(guān)于“類(lèi)”的描述 。Scala類(lèi)使用和Java類(lèi)似的語(yǔ)法進(jìn)行定義。但是一個(gè)重要的不同點(diǎn)在于Scala中的類(lèi)可以擁有參數(shù),這樣就可以得出我們下面關(guān)于對(duì)復(fù)數(shù)類(lèi)(Complex)的定義:

class Complex(real: Double, imaginary: Double) {
       
def re() = real
       
def im() = imaginary
}

我們的復(fù)數(shù)類(lèi)(Complex)接受兩個(gè)參數(shù):實(shí)部和虛部。這些參數(shù)必須在實(shí)例化時(shí)進(jìn)行傳遞,就像這樣:new Complex(1.5, 2.3)。類(lèi)定義中包括兩個(gè)叫做re和im的方法,分別接受上面提到的兩個(gè)參數(shù)。

值得注意的是這兩個(gè)方法的返回類(lèi)型并沒(méi)有顯式的聲明出來(lái)。他們會(huì)被編譯器自動(dòng)識(shí)別。在本例中他們被識(shí)別為Double

但是編譯器并不總是像本例中的那樣進(jìn)行自動(dòng)識(shí)別。不幸的是關(guān)于什么時(shí)候識(shí)別,什么時(shí)候不識(shí)別的規(guī)則相當(dāng)冗雜。在實(shí)踐中這通常不會(huì)成為一個(gè)問(wèn)題,因?yàn)楫?dāng)編譯器處理不了的時(shí)候會(huì)發(fā)出相當(dāng)?shù)谋г埂W鳛橐粋€(gè)推薦的原則,Scala的新手們通常可以試著省略類(lèi)型定義而讓編譯器通過(guò)上下文自己判斷。久而久之,新手們就可以感知到什么時(shí)候應(yīng)該省略類(lèi)型,什么時(shí)候不應(yīng)該。

5.1 無(wú)參方法

關(guān)于方法re和im還有一個(gè)小問(wèn)題:你必須在名字后面加上一對(duì)括號(hào)來(lái)調(diào)用它們。請(qǐng)看下面的例子:

object ComplexNumbers {
       
def main(args: Array[String]) {
                val c
= new Complex(1.2, 3.4)
                println
("imaginary part: " + c.im())
       
}
}

你可能覺(jué)得吧這些函數(shù)當(dāng)作變量使用,而不是當(dāng)作函數(shù)進(jìn)行調(diào)用,可能會(huì)更加令人感到舒服。事實(shí)上我們可以通過(guò)定義無(wú)參函數(shù)在Scala做到這點(diǎn)。這類(lèi)函數(shù)與其他的具有0個(gè)參數(shù)的函數(shù)的不同點(diǎn)在于他們定義時(shí)不需要在名字后面加括弧,所以在使用時(shí)也不用加(但是無(wú)疑的,他們是函數(shù)),因此,我們的Complex類(lèi)可以重新寫(xiě)成下面的樣子;

class Complex(real: Double, imaginary: Double) {
       
def re = real
       
def im = imaginary
}

5.2 繼承和覆蓋

Scala中的所有類(lèi)都繼承一個(gè)父類(lèi),當(dāng)沒(méi)有顯示聲明父類(lèi)時(shí)(就像上面定義的Complex一樣),它們的父類(lèi)隱形指定為scala.AnyRef。

在子類(lèi)中覆蓋父類(lèi)的成員是可能的。但是你需要通過(guò)override修飾符顯示指定成員的覆蓋。這樣的規(guī)則可以避免意外覆蓋的情況發(fā)生。作為演示,我們?cè)贑omplex的定義中覆蓋了Object的toString方法。

class Complex(real: Double, imaginary: Double) {
       
def re = real
       
def im = imaginary
       
override def toString() =
               
"" + re + (if (im < 0) "" else "+") + im + "i"
}

有關(guān)Scala類(lèi)先介紹到這里,下面將介紹Scala的模式匹配和條件類(lèi)。

【相關(guān)閱讀】

  1. 萬(wàn)物皆對(duì)象:介紹Scala對(duì)象
  2. Scala入門(mén):Scala例子,以及如何與Java交互
  3. Scala開(kāi)發(fā)環(huán)境搭建與資源推薦
  4. Google App Engine上的Scala+Lift初試
  5. Scala初學(xué)者學(xué)習(xí)資料:main(String[])
責(zé)任編輯:yangsai 來(lái)源: Google Code
相關(guān)推薦

2009-07-20 16:56:51

Scala類(lèi)的定義

2009-07-08 17:42:26

this屬性

2009-09-09 11:37:08

Scala的模式匹配

2009-12-11 10:42:00

Scala講座類(lèi)定義構(gòu)造函數(shù)

2011-07-07 13:39:14

Cocoa 類(lèi) 框架

2009-07-08 17:51:45

constructor

2009-07-08 17:48:18

prototype屬性

2009-06-16 17:54:38

Scala類(lèi)語(yǔ)法語(yǔ)義

2021-10-12 20:56:17

Python子類(lèi)父類(lèi)

2021-04-21 10:01:53

Python類(lèi)方法靜態(tài)方法

2017-07-21 09:40:35

Python類(lèi)、繼承和多態(tài)

2009-07-22 07:53:00

Scala無(wú)參數(shù)方法

2009-07-22 09:31:59

Scala類(lèi)類(lèi)層級(jí)Java類(lèi)

2009-07-22 07:53:00

Scala擴(kuò)展類(lèi)

2009-07-08 15:35:18

Case類(lèi)Scala

2023-10-18 16:30:50

2023-09-27 23:28:28

Python編程

2011-05-25 16:23:35

Javascript類(lèi)繼承

2021-12-09 10:51:47

Go類(lèi)繼承

2010-06-10 16:09:28

路由選擇協(xié)議
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 亚洲综合热 | 日韩欧美手机在线 | 欧美 中文字幕 | www.日本三级 | 一区天堂| 欧美精品一区二区三区四区 在线 | 日韩av一区二区在线观看 | 久久大 | 性色av网站| 亚洲欧美中文日韩在线v日本 | 国产日韩欧美另类 | 国产成人99av超碰超爽 | 国产成人精品免高潮在线观看 | 日本特黄a级高清免费大片 成年人黄色小视频 | 日韩欧美中文字幕在线观看 | 九九天堂网| 国产精品久久久久久久久久久久 | 久久久女| 精品九九九 | 亚洲精品久久久一区二区三区 | 在线看av网址 | 在线播放中文字幕 | www.久久| 有码在线 | 欧美电影免费网站 | 久久国产成人 | 免费的一级视频 | 久久久久网站 | 午夜男人视频 | 国产精品久久久久久吹潮日韩动画 | 日韩www | 国产aⅴ爽av久久久久久久 | 日韩在线一区二区三区 | 欧美激情一区二区 | 亚洲三级av | 午夜理伦三级理论三级在线观看 | 亚洲欧美视频一区 | 成人国产综合 | 国产成人高清在线观看 | 国内精品一区二区 | 国产精品视频网址 |