Latest web development tutorials

классы Scala и объекты

Класс является абстрактным объектом, а объект является конкретным экземпляром класса. Класс является абстрактным и не занимают память, а объект конкретно, занимают места в хранилище. Класс является основой для создания объекта, это программное обеспечение определенные шаблоны включают в себя методы и переменные в конкретных типах объектов в.

Мы можем использовать новое ключевое слово для создания объектов класса, примеры заключаются в следующем:

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);
   }
}

Scala в классе не объявлены публично, исходный файл Scala может иметь несколько классов.

Примеры вышеуказанного класса определяет две переменныех и у,метод: движение, метод не имеет возвращаемого значения.

Определение класса Scala могут иметь параметры, названные параметры класса, такие как выше хс, Ус, параметры класса во всем классе могут получить доступ.

Тогда мы можем использовать новый инстанциировать методы и переменные класса классов и доступа:

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

Скала Inherit

Scala наследуют базовый класс с Java очень похожи, но мы должны обратить внимание на следующие моменты:

  • 1, переписать неабстрактных метод должен использовать модификатор переопределения.
  • 2, доступна в прошлом только главный конструктор параметров конструктора записи базового класса.
  • 3. При переопределении в подклассах абстрактного суперкласса, вам не нужно использовать ключевое слово переопределения.

Давайте посмотрим на экземпляр:

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);
   }
}

Использование Scala расширяет ключевое слово, чтобы наследовать класс. Экземпляры Расположение класс наследует класс точки. Точка называется родительский класс (базовый класс), Место называется подклассом.

переопределить Вэл хс переписать поле родительского класса.

Все свойства и методы наследуют унаследует родительский класс, Scala позволяет наследовать только родительский класс.

Примерами могут служить следующие:

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

Скала переписать неабстрактных метод должен переопределить модификатор.

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]

Scala синглетон объект

В Scala, эта вещь не является статическим, но это также дает нам метод для достижения Singleton шаблон, и что является использование объекта ключевое слово.

Scala при использовании в одной модели прецедентов, в дополнение к определению класса, но и определение целевого объекта с тем же именем, разница между ним и классом, объект объект не может принимать параметры.

Когда объекты Singleton имеют одинаковое имя с классом, он называется компаньон объектов данного класса: компаньон объекта. Необходимо определить класс и связанные с ним объекты в том же исходном файле. Этот класс называется одноэлементный объект сопровождающий класс: компаньон класса. Класс и его компаньон объект может получить доступ друг к другу своих частных пользователей.

Экземпляры объекта 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