[Scala]Class
1.在Scala中 默認的屬性都是public,若要設為私有 要手動加上private,跟C#是相反的。
2.def 這個語句 是用來宣告委派的
3.get跟set語法 要注意喔,以後有提供兩種做法,當然視情況使用
Scala:
- 首先先建個類
- 再來寫個主程序 來進行調度 運行
- 細節請讀以下代碼附上的備註
1: class FirstClass {2:
3: //輔助構造式4: def this(firstValue:Int)=5: {
6: //至少要調用一個構造式(主或副都可),且一定要在開頭第一句7: // 不然會拋錯8: this();9: this.value=firstValue;10:
11: }
12:
13: // private[this] var value=014: // ^ 上面的意思是,不能在自己內部使用本類的實體參數的私有變數15: private var value=016:
17: //為了不暴露value屬性,也不給修改,故提供此方法18: def increment()=value+=119:
20:
21: //外部取得value的值,省略"( )"22: //取值器23: def current=value;24:
25: //示範在本類中 使用本類的實體參數 來取得私有變數26: def isLess(other:FirstClass)=value<other.value27:
28: //以下示範一般的Getter;Setter29: private var _Age:Int=030: def Age=_Age
31: def Age_=(newAge:Int)
32: {
33: if (newAge>100)_Age=10034: else _Age=newAge35: }
36:
37: }
1: object MyApp {2: def main(args: Array[String]) {
3:
4: val firstClass = new FirstClass(2);5: for (i <- 1 to 10) {6: firstClass.increment
7: }
8:
9: val firstClass2 = new FirstClass(3);10: for (i <- 1 to 10) {11: firstClass2.increment
12: }
13:
14: println(firstClass.current)
15:
16: println(firstClass2.current)
17:
18: println(firstClass.isLess(firstClass2))
19:
20: firstClass.Age=101;
21: println(firstClass.Age)
22:
23: firstClass.Age=99;
24: println(firstClass.Age)
25:
26: }
27: }
Result:
Scala:
- 主建構式說明
- 細節請讀以下代碼附上的備註
1: //主建構式 如下
2: // 表示在new的時候一定要帶參數
3: //以下這行為 主建構式
4: // (宣告類別有帶參數 即為主建構式,參數為封閉變數 非全局變數)
5: class SecondClass private (firstIndex:Int,initName:String) {
6: //class SecondClass private (firstIndex:Int,initName:String) {
7:
8: //此為副建構式;非必要 有用到在建立 副建構式
9: def this(firstIndex:Int,initName:String,message:String)=
10: {
11: //若有設定主建構式 一定要呼叫 主建構式
12: this(firstIndex,initName);
13: }
14:
15: private var Index=firstIndex
16: val Name=initName
17:
18: def increment()=
19: {
20: Index+=1
21: }
22: def current=Index;
23: }
1: object MyApp {
2: def main(args: Array[String]) {
3:
4: val firstClass2 = new SecondClass(5,"Benson","");
5: println(firstClass2.current)
6:
7: }
8: }
Result:
Scala:
- Scala 允許你可在任何結構內遷入任何語法(類中包類,或是方法中包著類...)
- 以下代碼示範 類 中 類
- 細節請讀以下代碼附上的備註
1: class GroupClass(groupName:String) {
2:
3: val GroupName=groupName
4: class Member(name:String)
5: {
6: val Name:String=name
7: }
8:
9:
10: var Members=new ArrayBuffer[GroupClass#Member]
11: //以下方法可讓 Member類別 開放於GroupClass類別中
12: //而不是活在實例的範圍中
13: // var Members=new ArrayBuffer[GroupClass#Member]
14:
15:
16: def Join(name:String)=
17: {
18: var member=new Member(name)
19: Members+=new Member(name)
20: member
21: }
22: }
1: object MyApp {
2: def main(args: Array[String]) {
3:
4: val rd1=new GroupClass("RD1")
5: val tee=rd1.Join("Tee")
6:
7: val rd2=new GroupClass("RD2")
8: val hank=rd2.Join("Kristen")
9:
10: //以下這句 不行
11: //因為類中類的有效範圍只在 該 父類實體 的封閉區域中
12: //意思是 不能從 父類實體 外 new 實體 ,但可在父類實體外,呼叫 父類實體 方法(或屬性)取得實體
13: //若以下這句要可行 可觀看GroupClass內的備註
14: //rd1.Members+=hank
15: }
16: }
By-藍小伙