Latest web development tutorials

스칼라 클래스와 객체

클래스는 추상 객체이며, 객체 클래스의 특정 인스턴스이다. 클래스는 추상적이고 메모리를 차지하지 않고, 목적은 콘크리트입니다 저장 공간을 차지합니다. 클래스는 객체를 생성하기위한 청사진, 그것은 소프트웨어 정의 된 템플릿이있는 개체의 특정 유형의 방법 및 변수를 포함합니다.

다음과 같이 우리는 클래스의 객체를 생성하는 새로운 키워드를 사용할 수 있습니다, 예는 다음과 같습니다

class Point(xc: Int, yc: Int) {
   var x: Int = xc
   var y: Int = yc

   def move(dx: Int, dy: Int) {
      x = x + dx
      y = y + dy
      println ("x 的坐标点: " + x);
      println ("y 的坐标点: " + y);
   }
}

클래스의 스칼라가 public으로 선언되지 않은, 스칼라 소스 파일은 여러 클래스를 가질 수 있습니다.

상기 방법은 리턴 값을 가지고 있지 이동: 상기 클래스의 예는 두 변수 X와Y,방법을정의한다.

클래스 정의 스칼라 매개 변수, 예를 들면 위의 XC로 불리는 클래스 매개 변수를 가질 수 있습니다, YC, 전체 클래스의 클래스 매개 변수에 액세스 할 수 있습니다.

그 다음 우리는 클래스 및 액세스 클래스 메소드와 변수의 인스턴스를 새 사용할 수 있습니다 :

import java.io._

class Point(xc: Int, yc: Int) {
   var x: Int = xc
   var y: Int = yc

   def move(dx: Int, dy: Int) {
      x = x + dx
      y = y + dy
      println ("x 的坐标点: " + x);
      println ("y 的坐标点: " + y);
   }
}

object Test {
   def main(args: Array[String]) {
      val pt = new Point(10, 20);

      // 移到一个新的位置
      pt.move(10, 10);
   }
}

위의 코드의 구현, 출력은 :

$ scalac Test.scala 
$ scala Test
x 的坐标点: 20
y 的坐标点: 30

스칼라 상속

스칼라는 자바와 기본 클래스와 매우 유사 상속, 그러나 우리는 다음과 같은 점에주의해야합니다 :

  • 1, 재정의 수정을 사용해야 아닌 추상적 인 방법을 다시 작성하십시오.
  • 도 2는, 과거의 기본 클래스 생성자 기록 파라미터의 주요 생성자 가능하다.
  • 서브 클래스의 추상 슈퍼 클래스에서 재정의 된 경우 3. 당신은 override 키워드를 사용할 필요가 없습니다.

의 인스턴스를 살펴 보자 :

class Point(xc: Int, yc: Int) {
   var x: Int = xc
   var y: Int = yc

   def move(dx: Int, dy: Int) {
      x = x + dx
      y = y + dy
      println ("x 的坐标点: " + x);
      println ("y 的坐标点: " + y);
   }
}

class Location(override val xc: Int, override val yc: Int,
   val zc :Int) extends Point(xc, yc){
   var z: Int = zc

   def move(dx: Int, dy: Int, dz: Int) {
      x = x + dx
      y = y + dy
      z = z + dz
      println ("x 的坐标点 : " + x);
      println ("y 的坐标点 : " + y);
      println ("z 的坐标点 : " + z);
   }
}

스칼라 사용하는 클래스를 상속하는 키워드를 확장합니다. 인스턴스 위치 클래스는 Point 클래스를 상속합니다. 포인트는 부모 클래스 (기본 클래스), 위치는 서브 클래스라고했다.

발 XC는 상위 클래스 필드를 다시보다 우선합니다.

모든 프로퍼티와 메소드는 상위 클래스를 상속 상속 스칼라는 부모 클래스를 상속 허용한다.

다음 예는 다음과 같다 :

import java.io._

class Point(val xc: Int, val yc: Int) {
   var x: Int = xc
   var y: Int = yc
   def move(dx: Int, dy: Int) {
      x = x + dx
      y = y + dy
      println ("x 的坐标点 : " + x);
      println ("y 的坐标点 : " + y);
   }
}

class Location(override val xc: Int, override val yc: Int,
   val zc :Int) extends Point(xc, yc){
   var z: Int = zc

   def move(dx: Int, dy: Int, dz: Int) {
      x = x + dx
      y = y + dy
      z = z + dz
      println ("x 的坐标点 : " + x);
      println ("y 的坐标点 : " + y);
      println ("z 的坐标点 : " + z);
   }
}

object Test {
   def main(args: Array[String]) {
      val loc = new Location(10, 20, 15);

      // 移到一个新的位置
      loc.move(10, 10, 5);
   }
}

위의 코드의 구현, 출력은 :

$ scalac Test.scala 
$ scala Test
x 的坐标点 : 20
y 的坐标点 : 30
z 的坐标点 : 20

스칼라는 수정을 오버라이드 (override) 할 필요가 아닌 추상적 인 방법을 다시 작성하십시오.

class Person {
  var name = ""
  override def toString = getClass.getName + "[name=" + name + "]"
}

class Employee extends Person {
  var salary = 0.0
  override def toString = super.toString + "[salary=" + salary + "]"
}

object Test extends App {
  val fred = new Employee
  fred.name = "Fred"
  fred.salary = 50000
  println(fred)
}

위의 코드의 구현, 출력은 :

$ scalac Test.scala 
$ scala Test
Employee[name=Fred][salary=50000.0]

스칼라 단일 객체

스칼라,이 점은 고정되지 않지만, 또한 싱글 패턴을 달성하는 방법을 우리에게 제공하고, 그 키워드 오브젝트를 사용하는 것이다.

스칼라 클래스 정의에 부가하여, 하나의 케이스 모델에서 사용될 때, 또한 같은 이름의 대상 오브젝트의 정의는 그와 클래스 사이의 차이이며, 물체 오브젝트 파라미터를 취할 수 없다.

동반자 개체 : 싱글 개체 클래스와 같은 이름을 공유 할 때, 그는이 클래스의 동반자 개체라고합니다. 당신은 클래스와 동일한 소스 파일에서 관련 개체를 정의해야합니다. 이 클래스는 단일 객체 첨부 클래스라고 : 동반자 클래스입니다. 클래스와 그 동반자 개체는 서로에게 자신의 개인 회원에 액세스 할 수 있습니다.

Singleton 객체 인스턴스

import java.io._

class Point(val xc: Int, val yc: Int) {
   var x: Int = xc
   var y: Int = yc
   def move(dx: Int, dy: Int) {
      x = x + dx
      y = y + dy
   }
}

object Test {
   def main(args: Array[String]) {
      val point = new Point(10, 20)
      printPoint

      def printPoint{
         println ("x 的坐标点 : " + point.x);
         println ("y 的坐标点 : " + point.y);
      }
   }
}

위의 코드의 구현, 출력은 :

$ scalac Test.scala 
$ scala Test
x 的坐标点 : 10
y 的坐标点 : 20

관련 객체 인스턴스

/* 文件名:Marker.scala
 * author:本教程
 * url:www.w3big.com
 */

// 私有构造方法
class Marker private(val color:String) {

  println("创建" + this)
  
  override def toString(): String = "颜色标记:"+ color
  
}

// 伴生对象,与类共享名字,可以访问类的私有属性和方法
object Marker{
  
    private val markers: Map[String, Marker] = Map(
      "red" -> new Marker("red"),
      "blue" -> new Marker("blue"),
      "green" -> new Marker("green")
    )
    
    def apply(color:String) = {
      if(markers.contains(color)) markers(color) else null
    }
  
    
    def getMarker(color:String) = { 
      if(markers.contains(color)) markers(color) else null
    }
    def main(args: Array[String]) { 
        println(Marker("red"))  
        // 单例函数调用,省略了.(点)符号  
		println(Marker getMarker "blue")  
    }
}

위의 코드의 구현, 출력은 :

$ scalac Marker.scala 
$ scala Marker
创建颜色标记:red
创建颜色标记:blue
创建颜色标记:green
颜色标记:red
颜色标记:blue