Scalaのクイックスタート(4) - 継承、インターフェース

Scalaのクイックスタート(4) - 継承、インターフェース

承継

1.継承の概念は:省略

2.テンプレート:

class Person(n:String,a:Int) {
  var name:String=n
  var age:Int=a
  def showInfo():Unit={
    println("学生信息如下")
    println("名字:"+name)
    println("年龄:"+age)
  }
}
class Student(n:String,a:Int) extends Person(n,a){
  def study():Unit={
    println(this.name+". Im learning scala. ")
  }
}

書き換えに記載の方法

直接メソッドの前にオーバーライドして修正

ケース:

class OverRideTest {
  def print(): Unit ={
    println("print")
  }
}
class ExtendOver extends OverRideTest {
  override def print(): Unit = {
    println("aaa")
  }
}
object Over{
  def main(args: Array[String]): Unit = {
    val ex=new ExtendOver
    ex.print()
  }
}

第二に、上のタイプおよびキャスト

1.クラスオブジェクトを取得し

Java中,获取String的Class对象
Class clazz=String.class
Scala中
val clazz=classOf[String]

JavaのOBJのinstanceof Tで同様obj.isInstanceOf [T]について2。

println("".isInstanceOf[String])

キャストobj.asInstanceOf Javaのようで[T](T)は、objについて3。

println(1.0.asInstanceOf[Int])

第三に、抽象クラス

抽象クラス抽象フィールドだけでなく、一般のフィールドは、唯一の抽象クラス抽象メソッドは、次の場合です

abstract class Animal{
  var name:String
  var age:Int
  def toString()
}

実装クラス

class Dog extends Animal{
  override var name: String = (){
    println("")
  }
  override var age: Int = _
}

第四に、匿名のサブクラス

唯一のクラスがこのクラスを使用すると仮定しての過程で、我々は匿名のサブクラスの機能を使用することができます

val animal=new Animal(){
      var name:String=_
      var age:Int=_
      override def toString(): Unit ={
        println("prprpr")
      }
    }

V.インタフェース

インタフェースのための特性、インターフェイスインスタンス

trait talk{
  def say(): Unit ={
    println("say")
  }
}

trait loud{
  def hey(): Unit ={
    println("hey")
  }
}

class Test extends loud with talk{
  def test: Unit ={
    println("test")
  }
}
object run{
  def main(args: Array[String]): Unit = {
    val t=new Test
    t.hey
    t.say
    t.test
  }
}

六、ケースクラス

class  Dog(name:String,age:Int){}

object run{
  def main(args: Array[String]): Unit = {
    val hashiqi=new Dog("hashiqi",1);
    val hashiqi2=new Dog("hashiqi",1);
    println(hashiqi==hashiqi2)//false
    println(hashiqi.equals(hashiqi2))//false
  }
}

把class改成case class,那么比较都为true

七、イテレータ

object run{
  def main(args: Array[String]): Unit = {
    val tup:(Double,Int,String,Boolean,Char)=(1.0,88,"abc",false,'a')
    val iter:Iterator[Any] = tup.productIterator
    val res=iter.map((x)=>{
      x match {
        case o:Int=> println(s"${o+1}")
        case "abc"=> println("99")
        case _ => println("??")//相当于default
      }
    });
    while(res.hasNext) res.next()
  }
}

八、部分関数

分類のために定義された入力値

object run{
  def main(args: Array[String]): Unit = {
    def xxx:PartialFunction[Any,String]={
      case "Hi" => "hello"
      case x:Int=> s"$x.. is int"
      case _ => "none"
    }

    println(xxx(444))
  }
}

九、暗黙の型変換

object run{
  def main(args: Array[String]): Unit = {
    implicit val a="aaa"
    def aaa(implicit name:String):Unit={
      println(name)
    }
    aaa//隐式吧上面的变量传进来
  }
}

おすすめ

転載: www.cnblogs.com/littlepage/p/11649563.html