Scalaのクイックスタート(3) - クラスとオブジェクト
まず、クラス
テンプレートはここのように見える、とJavaのような多くの
object a {
def main(args: Array[String]): Unit = {
val person=new Person
println(person.name+" "+person.age)
}
}
class Person{
var name:String = "steve yu"
var age = 10
}
不確実な財産のメンバーに会った、それは、ヌルを割り当てることが最善ではありません、アンダースコアを割り当てることができ、種類を指定する必要があります。int型の代表はタイプ0、0.0のダブル代わって、ブール虚偽の代表者、ヌル表すオブジェクトを強調したので、すべての問題を解決します。
改善後:
class Person{
var name:String = _
var age:Int = _
}
第二に、オブジェクトとメソッドを作成します
1.オブジェクトを作成します
我们可以加括号,也可以不加
val p=new Person
val p=new Person()
这两种都可以,用var还是val,官方推荐使用val
2.方法
そして、まったく同じ機能を作成します
3.コンストラクタ
def this(name:String,age:Int){
this
this.name=name
this.age=age
}
4.主ビルダー、ビルダーを直接パラメータを使用して、ブラケット、後者は、プライマリコンストラクタクラスの人であり、マスター3に設定されていない、コンストラクタを書くことができ
class Person(){
var name:String = _
var age:Int = _
def this(name:String,age:Int){
this
this.name=name
this.age=age
}
}
プライベートコンストラクタ
- メインコンストラクタの民営化
class Person private(){}
- 民営化の他のコンストラクタ
private def this(name:String,age:Int){
this
this.name=name
this.age=age
}
- 高度使用コンストラクタ(変性inname使用valが、その後innameは、読み取り専用変数です)
class Person (val inname:String){
var name=inname
}
第三に、パッケージ
1.同じ名前のクラス下請法
object Test {
def main(args: Array[String]): Unit = {
val tiger1=new com.littlepage.scalapackage.steve.Tiger
val tiger2=new com.littlepage.scalapackage.yu.Tiger
}
}
2.scalaパッケージは、任意のパッケージを変更することができ、かつ、パッケージの変更後に、コンパイラは前にコンテンツを削除し、再コンパイルすることができます
あなたはクラスの同じ名前を使用する場合の参照3.パッケージ、この最初のクラスの参照は、あなたが完全な名前を記述する必要があります
例:
val a=new com.littlepage.Tiger
4.パケットオブジェクト
なぜパッケージオブジェクト。パッケージ内のクラスを定義していない、直接描画法、誤差は、それゆえ、我々は、パッケージオブジェクト技術が必要になります
package object people{
//定义一个包对象
}
関数を呼び出す5. Packageオブジェクト
object Tiger {
def main(args: Array[String]): Unit = {
A.print_a
}
}
package object A{
def print_a: Unit ={
println("a")
}
}
このパッケージAの内部には、あなたの仲間のクラスがあれば、あなたが直接電話をかけることができ
package A{
object Tiger {
def main(args: Array[String]): Unit = {
print_a
}
}
}
私たちは、コードを逆コンパイルして、このパッケージは、実際にクラスの最終で見つかった、静的MODULEの$オブジェクトの真ん中
包对象注意点:
1.每个包只有一个包对象
2.包对象的名称需要和包名保持一致
第四に、アクセス修飾子
1、効果の公共の使用がされているデフォルトの属性であり、底がプライベートで見ます
2.メソッドはデフォルトで、デフォルトはpublicです
唯一のクラス内で利用可能な3.private私的権利、および関連オブジェクト
4.protectedが保護され、権利の保護は、サブクラスだけがアクセスすることができ、同じパッケージにアクセスすることはできません
5.scalaでは一切公開鍵は、公開プロパティとメソッドを変更することはできません
注意点:
scala中,我们import一个包中所有的内容应该使用下划线,而不是使用*
宿題
1.、クラスの時間を書く分、読み取り専用に追加以前(その他:時間):前に、他の方法よりも時間のある瞬間かどうかをチェックし、時間属性ブール。構成された実施例の時間オブジェクトがなければならない新たな時間(時間、分)
class Time(val hrs:Int,val min:Int) {
val hours:Int=hrs
val minutes:Int=min
def before(other:Time):Boolean={
if(hours!=other.hours) hours<other.hours
else minutes<other.minutes
}
}
JavaのHashMapの2.プログラムを書くすべての要素は、これらの二つのカテゴリーの名前を変更する文の導入により、ScalaのHashMapのにコピーします。
object Test {
import java.util.{HashMap=>JavaHashMap}
import collection.mutable.{HashMap=>ScalaHashMap}
def main(args: Array[String]): Unit = {
val jm=new JavaHashMap[Int,String]
jm.put(1,"小舞")
jm.put(2,"团团")
jm.put(2,"怪兽")
jm.put(4,"S.X")
val sm=new ScalaHashMap[Int,String]()
for(k<-jm.keySet().toArray()){
sm.put(k.asInstanceOf[Int],jm.get(k))
}
println(sm.mkString(" "))
}
}