Scalaピット六(抽象クラス)

2376 ワード

1.抽象クラス(abstract class)
クラスの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._