Scala语言入门二(对象)

简介: 讲述Scala中的面向对象相关知识点

讲述Scala中的面向对象相关知识点

一、特征

  • 封装:属性和方法封装在类中
  • 继承:父类和子类的一个关系
  • 多态:父类引用指向子类对象

二、类的定义和使用

类是对象的抽象,而对象是类的具体实例。类是抽象的,不占用内存,而对象是具体的,占用存储空间

/**
 * @author Gjing
 **/
class Person {
  // 定义属性,Scala会自动帮var类型的属性生成get、set,val类型的属性生成get
  var name = ""
  val age = 10
  // 可通过下划线作为一个占位符,使用占位符时就不允许使用val了
  var idCard: String = _

  def eat(): Unit = {

    println(name + "吃饭。。。")
  }
}

object Test {

  def main(args: Array[String]): Unit = {
    val person = new Person()
    person.name = "张三"
    person.idCard = "1234"
    person.eat()
    println(person.idCard)
  }
}

三、主构造器与附属构造器

/**
 * @author Gjing
 **/
class Men(name: String, age: Int) {
  // 定义属性
  var userName: String = name
  var userAge: Int = age
  var idCard: String = ""

  // 附属构造器
  def this(name: String, age: Int, idCard: String) {
    this(name, age)
    this.idCard = idCard
  }
}

四、继承

/**
 * @author Gjing
 **/
class Son(name: String, age: Int, val city: String) extends Men(name, age) {

}

object Test2 {
  def main(args: Array[String]): Unit = {
    val son = new Son("张三", 11, "厦门")
    println(son.city)
    println(son.userAge)
    println(son.userName)
  }
}

五、重写

重写一个非抽象方法必须使用override修饰符;在子类中重写超类的抽象方法时,你不需要使用override关键字

/**
 * @author Gjing
 **/
class Son(name: String, age: Int, val city: String) extends Men(name, age) {
  override def toString: String = s"Son($name,$age,$city)"
}

六、抽象类

/**
 * @author Gjing
 **/
abstract class Food {
  def name():Unit
}

class Apple extends Food {
  def name(): Unit = {
    print("Apple")
  }
}

七、伴生类和伴生对象

如果有一个class和一个同名的object,那么就称这个object是class的伴生对象,class是object的伴生类

/**
 * @author Gjing
 **/
class ApplyTest {
  def apply(): Unit = {
    println("Executor class apply...")
  }
}

object ApplyTest {
  // 最佳实践,在object的apply方法去new class
  def apply(): ApplyTest = {
    println("Executor object apply...")
    new ApplyTest()
  }
}

object Test3 {
  def main(args: Array[String]): Unit = {
    // 直接通过类名加括号  是调用object中的apply方法
    val test = ApplyTest()
    // 对象加括号,是调用class中的apply方法
    test()
  }
}
目录
相关文章
|
4月前
|
分布式计算 Java Hadoop
Scala入门必刷的100道练习题(附答案)
Scala入门必刷的100道练习题(附答案)
267 1
|
4月前
|
Java 大数据 Scala
Scala入门【运算符和流程控制】
Scala入门【运算符和流程控制】
|
4月前
|
Java Shell API
Scala入门【变量和数据类型】
Scala入门【变量和数据类型】
|
5月前
|
Scala
164 Scala 对象
164 Scala 对象
16 0
|
6月前
|
安全 Java 编译器
Scala语言入门:初学者的基础语法指南
作为一种在Java虚拟机(JVM)上运行的静态类型编程语言,Scala结合了面向对象和函数式编程的特性,使它既有强大的表达力又具备优秀的型态控制
27 0
|
11月前
|
JavaScript 前端开发 Java
Scala语言入门以及基本语法
Scala语言入门以及基本语法
|
12月前
|
Scala
Scala快速入门-6-单例对象及伴生对象
• 用对象作为单例或存放工具方法,Scala没有静态方法或字段 • 类可以有一个同名的伴生对象 • 对象的apply方法通常用来构造伴生类的新实例 • Scala的main函数定义 单例对象
|
分布式计算 Java 程序员
spark开发基础之从Scala符号入门Scala
spark开发基础之从Scala符号入门Scala
137 0
spark开发基础之从Scala符号入门Scala
|
开发框架 IDE Java
体验 Scala 语言的 Play Web 框架
体验 Scala 语言的 Play Web 框架
体验 Scala 语言的 Play Web 框架
|
SQL 存储 NoSQL
JVM 上数据处理语言的竞争:Kotlin, Scala 和 SPL
JVM 上数据处理语言的竞争:Kotlin, Scala 和 SPL
198 0