第10章継承
10.1継承されたクラス
クラス人{ VAR名 =「」 }
クラス従業員延び{人 VAR給与 = 0.0 DEF記述名を有する従業員「+名+「及び給与」+ =」給与 }
ヒント:
10.2メソッドのオーバーライド
クラス人{ VAR名 = "" オーバーライドデフのtoString = getClass.getName + "[NAME =" +名+ "]" }
クラスの従業員が延びている人{ VAR給与 = 0.0 オーバーライドデフのtoString = スーパー .toString + "[給与=" +給与+ "]" }
型チェックと変換10.3
1)JavaのようなclassOf [文字列] String.classを有します
ジャワのObj isInstanceof T枚2)obj.isInstanceOf [T]
Java(T)は、objと同様3)obj.asInstanceOf [T]
println( "こんにちは" .isInstanceOf [文字列]) のprintln( "こんにちは" .asInstanceOf [文字列]) のprintln(classOf [文字列])
10.4保護されたフィールドおよびメソッド
Scalaは、つまり、継承のみアクセスすることができ、それよりも厳格であることをJavaで保護され、次回同じパッケージではありません。
建設10.5スーパー
各補助コンストラクタが以前に定義された補助ビルダーに基づかなければならないしながらクラスは、コンストラクタを有しており、主な二次構造の任意の数の
またはプライマリコンストラクタスタートを呼び出します。補助コンストラクタは、最終的には、プライマリコンストラクタは、スーパークラスを呼び出すことができ、サブクラスのコンストラクタを呼び出します
コンストラクタ。補助コンストラクタは、直接スーパークラスのコンストラクタを呼び出すことはありません。Scalaのコンストラクタでは、スーパー(のparams)を呼び出すことはできません。
**補助現在のクラスのコンストラクタ]、最終的に[]現在のクラスの主なコンストラクタを呼び出します。
**サブクラスのプライマリコンストラクタ、最終的には(コンストラクタが補助することができ、マスタービルダーでもよい)、親クラスのコンストラクタを呼び出します
クラス犬(年齢:INT){
DEF この(){
この(10 )
}
} ヴァル犬 = 新しい犬(20 ) ヴァル犬 = 新しい犬()
クラス人(ヴァル名:文字列、ヴァル年齢:INT){ オーバーライドDEFのtoString = getClass.getName + "[NAME =" +名+ "年齢=" +年齢+ "]" }
クラス従業員(名:文字列、年齢:INT、ヴァル給与:ダブル)が延びている人(名前、年齢){ オーバーライドデフのtoStringは = スーパー .toString + "[給与=" +給与+ "]" }
10.6書き換えフィールド(上書きフィールド)
クラスPERSON1(ヴァル名:文字列、VaRの年齢:INT){ printlnの(「主なコンストラクタが呼び出された」) ヴァル・スクール =「五道口職業技術学院」 DEFのSLEEP =「8時間」 オーバーライドDEFののtoStringを:文字列 =「マイ、私の名前"+学校+": "+名+"、私の年齢:学校がある「+ 年齢 }
クラスPERSON2(名称:文字列、年齢:INT)に延びPERSON1(名前、年齢){
オーバーライドヴァル学校:文字列= "清华大学"
}
コール:
// 上書きフィールド ヴァル人= 新しい新 PERSON2(「ニック」、20 ) のprintln(人) // 主なコンストラクタが呼び出されている // 私の学校がある:清華大学、私の名前:ニック、私の年齢:20
ヒントをスクリーミング:
1、DEF DEFは別のものを書き換えることができます
2、ヴァルヴァルまたは別の書き換えだけでDEFパラメータのVARなしに書き換えることができません
3、VARにのみ書き換えることができ抽象VARを
= valの"123"はDEF書き換えることはできません// = A "123" DEF DEFはパラメータを書き換えることができません//ヴァル
抽象VARとは何ですか?
sbstract クラス person3 {
VAR名:文字列//これは抽象VARです
}
10.7匿名のサブクラス
クラスの人(ヴァル名:文字列){ オーバーライドデフのtoString = getClass.getName + "[名=" +名+ "]" }
使用: valの外国人は = 新しい人( "フレッド" ){ defの挨拶 =「こんにちは、地球人!私の名前はフレッドです。」 }
のprintln(alien.greeting)
10.8抽象クラス
抽象 クラス人(ヴァルのPNAME:文字列){ ヴァルID:のInt // なし初期-この抽象ゲッターメソッドと抽象フィールドである VAR名:文字列 // 抽象ゲッターとセッターメソッドを用いて、別の抽象フィールド idString DEF:のIntを/ / いいえメソッド本体は、これが抽象メソッドではない }
クラス(:文字列PNAME)従業員が延び人(PNAME){ ヴァルID = 5 。 VAR名 = ">>>" DEF idString = pname.hashCode // 不要overrideキーワード }
10.9建設順序と事前に定義されました
10.10 Scalaの継承階層