Scalaピット六(抽象クラス)
2376 ワード
1.抽象クラス(abstract class)
クラスの1つ以上のメソッドには完全な定義がありません
メソッドを宣言するときはメソッドを書かないだけで、キーワードは必要ありません.
子クラスが親クラスの抽象メソッドを書き換えるときにoverrideを追加する必要はありません
親は抽象フィールド(初期値のないフィールド)を宣言できます.
サブクラスが親抽象フィールドを書き換えるときにoverrideを追加する必要はありません
2.trait特質比較JAVA 8の言い訳
具体的な実現を含む言い訳として理解できる
フィールドと動作のセット
クラスに混入し、最初にextendsを使用します.
withキーワードにより、1つのクラスで複数の特質を拡張できます.
特質のあるオブジェクト
特質は左から右へ構造されている
2.applyメソッドと単一のオブジェクト
3.パッケージ
直列package com.aaa{
//このレベルでは見られないbbbのメンバー
package.bbb{
}
}
上部マークpackage com.b
package b
かばんの相手は公有のものを同じかばんの中に入れます.
パッケージの表示
package aa.bb.cc.dd
class XXX{
private[dd]def as={}//ddパッケージ以下でのみ使用可能
}
パッケージはどこでも導入
メンバーimport javaの名前を変更します.unil.(HashMap => JavaHashMap)
非表示パッケージ(hashMap=>)
Javaを自動的に導入します.lang._
クラスの1つ以上のメソッドには完全な定義がありません
メソッドを宣言するときはメソッドを書かないだけで、キーワードは必要ありません.
子クラスが親クラスの抽象メソッドを書き換えるときにoverrideを追加する必要はありません
親は抽象フィールド(初期値のないフィールド)を宣言できます.
サブクラスが親抽象フィールドを書き換えるときにoverrideを追加する必要はありません
class Test3 {
}
abstract class Person{
def speak
val name : String
var age : Int
}
class Student extends Person{
def speak{
println("speak!!")
}
var age = 100
val name = "ahaha"
}
object Test3 extends App{
var s = new Student;
s.speak
print (s.name + ":" + s.age)
}
2.trait特質比較JAVA 8の言い訳
具体的な実現を含む言い訳として理解できる
フィールドと動作のセット
クラスに混入し、最初にextendsを使用します.
withキーワードにより、1つのクラスで複数の特質を拡張できます.
特質のあるオブジェクト
特質は左から右へ構造されている
trait Logger{
def log(msg:String)
}
trait ConsoleLogger extends Logger{
def log(msg : String){
println(msg)
}
}
class loggerImpl extends ConsoleLogger{
def test{
log("aaa")
}
}
trait ConsoleLogger{
def log(msg : String){
println("sava money" + msg)
}
}
trait MessageLogger extends ConsoleLogger{
override def log(msg : String){
println("sava money to bank" + msg)
}
}
abstract class Account{
def save
}
class MyAcconunt extends Account with ConsoleLogger{
def save{
log("100")
}
}
object Test3 extends App{
val a = new MyAcconunt with MessageLogger //
a.save
}
class loggerImpl extends ConsoleLogger{
def test{
log("aaa")
}
}
2.applyメソッドと単一のオブジェクト
class Test4 {
}
object Test4 extends App{
val a = ApplyText() // + object apply
a.test
val b = new ApplyTest// + apply
println(b())
}
class ApplyTest{
def apply() = "APPLY"
def test{
println("test")
}
}
//object
object ApplyText{ //
def apply()= new ApplyTest
def static{
println("mmm a static method")
}
}
3.パッケージ
直列package com.aaa{
//このレベルでは見られないbbbのメンバー
package.bbb{
}
}
上部マークpackage com.b
package b
かばんの相手は公有のものを同じかばんの中に入れます.
パッケージの表示
package aa.bb.cc.dd
class XXX{
private[dd]def as={}//ddパッケージ以下でのみ使用可能
}
パッケージはどこでも導入
メンバーimport javaの名前を変更します.unil.(HashMap => JavaHashMap)
非表示パッケージ(hashMap=>)
Javaを自動的に導入します.lang._