JavaとScalaの違いその7 ... こんすとらくたああ
今回はJavaとScalaで結構違いがあるコンストラクタに関して。
基本コンストラクタ、補助コンストラクタ、親クラスのコンストラクタの3つについて説明(実質ただのコード笑)です。
//ParantCクラスを継承し親クラスの基本コンストラクタの引数を設定。
class Const (var id:Int,var name:String="Who are you?") extends ParentC("The Tanaka") {
//コンストラクタの設定はclassでは可能だがobjectでは出来ない
//なぜならobjectはインスタンスが自動生成されるからで、当然補助コンストラクタも不可
//初期値を入れることで補助コンストラクタを実質作成。
/*このようにちゃんと補助コンストラクタを作成するのもおっけー
* def this(id:Int)={
this(id,"Yamamoto")
}
*/
def printvalue()={
println(id+name)
}
}
class ParentC(Family:String){
//親コンストラクタ設定
def GetFamilyName()={
println(Family)
}
}
object ConstMain extends App{
var ct=new Const(3,"Amamiya")
ct.printvalue
//Constのインスタンス生成。引数は3とAmamiya
var ct2=new Const(4)
//Constのインスタンス生成。ただし引数はInt型ひとつだけ。本来この書き方はだめだけど
//初期値をあらかじめ設定しているのでおっけーb
ct2.printvalue
var cdt3=new ParentC("The Suzuki")
cdt3.GetFamilyName
//親クラスから基本コンストラクタを呼び出し
ct2.GetFamilyName
//子クラスのクラス定義あたまで親クラスの基本コンストラクタを設定しているのでFamilyにはしっかり値が入っている。
ct.GetFamilyName
}
コンソール
3Amamiya
4Who are you?
The Suzuki
The Tanaka
The Tanaka