10.Scala-の継承

第10章継承

10.1継承されたクラス

Javaは、サブクラスとスーパークラスは必要はない与えられた定義にextendsキーワードを同様
フィールドとメソッド、またはメソッドがスーパークラスをオーバーライドします。
クラス人{ 
  VAR名 =「」
} 
クラス従業員延び{人   VAR給与 = 0.0   DEF記述名を有する従業員「+名+「及び給与」+ =」給与 }

 ヒント:

クラスはfinalとして宣言されている場合は、彼が継承することはできません話します。単一のメソッドがfinalとして宣言されている場合、しません
それは書き換えることができます。

 

 

 

 

 

10.2メソッドのオーバーライド

書き換え可能な非抽象メソッドは修飾子をオーバーライドする必要があります。
superキーワードを使用してスーパークラスのメソッドを呼び出します
クラス人{ 
  VAR名 = "" 
  オーバーライドデフのtoString = getClass.getName + "[NAME =" +名+ "]" 
} 



クラスの従業員が延びている人{   VAR給与 = 0.0   オーバーライドデフのtoString = スーパー .toString + "[給与=" +給与+ "]" }

 

 

 

 

 

型チェックと変換10.3

 

オブジェクトが、指定されたクラスに属しているかどうかをテストするには、isInstanceOfメソッドを使用することができます。使用
メソッドは、サブクラスの参照への参照をasInstanceOf。オブジェクトのクラス名を取得classof。

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匿名のサブクラス

Javaのように、あなたは、書き換えられて、コードのブロックを含むか、または定義する方法を作成することができます
匿名のサブクラス:
クラスの人(ヴァル名:文字列){ 
  オーバーライドデフの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の継承階層

 

 

 

 

 

 

 

おすすめ

転載: www.cnblogs.com/LXL616/p/11128960.html