当前位置:首页 > 编程笔记 > 正文
已解决

8.Scala面向对象编程

来自网友在路上 150850提问 提问时间:2023-10-30 06:41:49阅读次数: 50

最佳答案 问答题库508位专家为你答疑解惑

概述

在这里主要了解Scala中的类、对象和接口

  • Scala中类和java中的类基本是类似的
  • Scala中的对象是需要定义的,而java中的对象是通过class new出来的
  • Scala中的接口是traitjava中的接口是interface

相关链接

阅读之前,可以浏览一下

scala相关文章

类-class

class 前面以前已经详细说明,点此链接浏览

scala类
scala辅助构造器与为构造函数提供默认值(一)

对象-object

前面的scala中的classjava中的class是类似的,下面来看一个java中没有的内容,叫object
可能有疑问了,Java中也有object,通过class就可以创建object
但是注意了,在scala中,我们可以直接定义一个object,就像定义class一样。

  • object:相当于class的单个实例,通常在里面放一些静态的field或者method
  • object不能定义带参数的constructor只有空参的constructor
  • 第一次调用object的方法时,会执行object的constructor,也就是执行object内部不在任何方法中的代码,因为它只有空参的构造函数
    但是注意,object的constructor的代码只会在他第一次被调用时执行一次,以后再次调用就不会再执行了
  • object通常用于作为单例模式的实现,或者放class的一些静态成员,比如工具方法
  • object可以直接使用,不能new
  • 创建一个object,使用object关键字
object Person {var age = 1println("this Person object!")def getAge  = age 
}

在这里插入图片描述

伴生对象

前面了解了classobject,那下面再来看一个特殊的概念,伴生对象
如果有一个class,还有一个与class同名的object,那么就称这个objectclass伴生对象classobject伴生类

注意: 伴生类和伴生对象必须存放在一个.scala文件之中
伴生类中可以访问伴生对象中的private field

创建一个Person objectPerson class

package com.fun.scalaclass Person(val name:String,val age:Int) {private val strM ="测试"def sayHello = println("Hi, " + name + ",you are " + age + " years old!" + ", and you  have " + Person.fdNum+ " friend.")}object Person{private val fdNum =1def getFdNum = fdNumdef main(args: Array[String]): Unit = {new Person("long",33).sayHello}
}		

在这里插入图片描述

apply

applyobject中非常重要的一个特殊方法,通常在伴生对象中实现apply方法,并在其中实现构造伴生类对象的功能
在创建对象的时候,就不需要使用new Class的方式,而是使用Class()的方式,隐式调用伴生对象的apply方法,这样会让对象创建更加简洁

例如:Array的伴生对象的apply方法就实现了接收可变数量的参数,以及会创建一个Array对象
val a = Array(1, 2, 3, 4, 5)

官方文档
在这里插入图片描述
源码如下
在这里插入图片描述
对上面Person伴生对象进行改造

object Person {private val fdNum = 1def getFdNum = fdNumdef apply(name: String) = {println("apply exec...")new Person(name, 33)}def main(args: Array[String]): Unit = {Person("张").sayHello}
}

在这里插入图片描述

接口-trait

接下来看一个scala中的接口,这个接口也是比较特殊的

Scala中的接口称为traittrait类似于Java中的interface
triat中可以定义抽象方法

类可以使用extends 关键字继承trait,无论继承类还是trait统一都是使用extends这个关键字
类继承trait后,必须实现trait中的抽象方法,实现时不需要使用override关键字

scala不支持对类进行多继承,但是支持对trait进行多重继承,使用with关键字即可

package com.fun.scalaobject PersonDemo {def main(args: Array[String]): Unit = {val p1 = new PersonX("tom")val p2 = new PersonX("jack")p1.sayHello(p2.name)p1.makeFriends(p2)}
}trait HelloTrait { def sayHello(name: String)}
trait MakeFriendsTrait { def makeFriends(p: PersonX)}
class PersonX(val name: String) extends HelloTrait with MakeFriendsTrait {def sayHello(name: String) = println("Hello, " + name)def makeFriends(p: PersonX) = println("Hello, my name is " + name + ", your name is " + p.name)
}

在这里插入图片描述

结束

Scala面向对象编程至此就结束了

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"8.Scala面向对象编程":http://eshow365.cn/6-27661-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!