LotosLabo

プログラミング技術とか気になった情報を載せていきます

Scalaについて2

クラスの定義

class A{

}

メンバの定義

class A {
def method(n: Int) = 1 + n
val a = 1
var b = 2
}

インスタンスの生成

val a = new A
println(a.method(1))
println(a.a)
a.b = 10

コンストラクタの定義

class A(_a: Int) {
val a = _a
def method(a: Int) = _a + a
}

val a = new A(1)
a.a
a.method(1)


補助コンストラクタ

class A(_name: String) {
def this() = this("John Doe")
val name = _name
}
val a = new A
a.name

メソッド名を「this」にすることで、補助コンストラクタとなります


クラスの継承

class A(a: Int) {
def method(n: Int) = a + n
}

class B extends A(1)

val b = new B
b.method(1)


内部クラス

class A {
class B {
val b = 1
}
}

抽象クラス

abstract class A {
def method(n: Int): Int
}

class B extends A {
def method(n: Int) = n + 1
}

val b = new B
b.method(1)



トレイト


簡単に言うとJavaのインターフェースみたいなものです。Scalaのトレイトは、インタフェースと違ってメソッドの実装を持つことが出来ます。

trait A {
def method1(n: Int): Int

def method2(n: Int)

def method3(n: Int): Int = n + 1

トレイトは「trait」キーワード使い定義します。戻り値の型を省略した場合、Unit型となります。


ミックスイン

トレイトのメソッドを実装するには「with」キーワードでつなげていきます。もしクラスを継承しない場合はextendsの次に記述します。@Overrideはつけません。

trait A {
def methodA(n: Int): Int

def myPrintln(n: Int)

def plus(n: Int): Int = n + 1
}

trait B {
def methodB(s: String): String
}

class C extends A with B {
def methodA(n: Int) = n * 2

def myPrintln(n: Int) { println(n)}

def methodB(s: String) = s + "string"
}


オーバーライド


trait A {
def method(n: Int) = n + 1
}

class B extends A {
override def method(n: Int) = n * 2
}