开发者社区> 阿靖哦> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Scala语言入门三(集合)
Scala集合的概念和使用
653 0
《Scala机器学习》一一3.7 总结
本节书摘来自华章出版社《Scala机器学习》一 书中的第3章,第3.7节,作者:[美] 亚历克斯·科兹洛夫(Alex Kozlov)著 ,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
854 0
+关注
阿靖哦
JAVA开发工程师
70
文章
65
问答
来源圈子
更多
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载