栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Scala面向对象的特性

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Scala面向对象的特性

Scala是一种面向对象的语言

1.1.1类与对象

无论是在Scala中还是Java中,类都是对象的抽象,而对象都是类的具体实例;

创建类的语法格式如下:

1     class  类名[参数列表]

当类创建好之后,若是想要访问类中的方法和字段,就需要创造一个对象。

创建对象的语法格式如下:

1     类名  对象名称  =  new 类名();

下面,我们创建一个Point类, 并在类中定义两个字段x和y以及一个没有返回值的move()方法,使用Point类的实例对象来访问类中的方法和字段,代码如下:

class Point(x:Int,y:Int) { //x轴,y轴
  var xc =x
  var xy =y

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

}

object ClassTest {
  def main(args: Array[String]){
    //定义类对象
    val pt=new Point(10,20); //初始坐标
    //移到一个新位置
    pt.move(10,10);

  }

}

1.1.2继承

Scala和Java类似,只允许继承一个父类。不同的是,Java只能继承父类中非私有的属性和方法。而Scala可以继承父类中的所有属性和方法。

在Scala子类继承父类的时候,有以下几点需要注意:

如果子类要重写一个父类中的非抽象方法,则必须使用override关键字,否则会出现语法错误如果子类要重写父类中的抽象方法时,则不需要使用override关键字。

下面,创建一个Point类和一个Location类,并且Location类继承Point类,演示子类Location重写父类Point中的字段,代码如下:

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

  def move(dx:Int,dy:Int): Unit ={
    x+=dx
    y+=dy

    println("x的坐标为:"+x)
    println("y的坐标为:"+y)
  }
}
//定义子类继承父类Point
class Location( val xc:Int, val yc:Int,zc:Int)extends Point1(xc:Int,yc:Int){
      var z=zc

  def move(dx:Int,dy:Int,dz:Int): Unit ={
    x+=dx
    y+=dy
    z+=dz

    println("x的坐标为:"+x)
    println("y的坐标为:"+y)
    println("z的坐标为:"+z)
  }
}
object ExtendsTest {
  def main(args: Array[String]): Unit = {
    //定义Location对象
    val loc=new Location(10,10,10)
    loc.move(10,10,10)
  }
}

1.1.3单例对象和伴生对象 

在Scala中,没有静态方法或静态字段,所以不能用类名直接访问类中的方法和字段,而是创建类的实例对象去访问类中的方法和字段。但是,Scala中提供了object这个关键字用来实现单例模式,使用关键字object创建的对象为单例对象。

创建单例对象的语法格式如下:

1     object objectName

下面,创建一个单例对象SingletonObject,代码如下:

object SingletonObject{
  def hello()={
    println("这是一个单例对象")
  }
}

object Singleton {
  def main(args: Array[String]): Unit = {
      SingletonObject.hello()
  }
}

在Scala中,在一个源文件中有一个类和一个单例对象,若单例对象名与类名相同,则把这个单例对象称作伴生对象;这个类则被称为是单例对象的伴生类。类和伴生对象之间可以相互访问私有的方法和字段。

下面,定义一个伴生对象Dog,演示操作类中的私有方法和字段,代码如下:

//伴生类
class bansheng{
  private var name="二哈"

  def printName(): Unit ={
    println(bansheng.CONSTANT+name)
  }
}
//伴生对象
object bansheng {
  //伴生对象中添加私有字段
  private var ConSTANT="旺旺"
  def main(args: Array[String]): Unit = {
      val dog=new bansheng
     dog.name="我才不是二哈"
    dog.printName()
  }

}

 

1.1.4特质 

在Scala中,Trait(特质)的功能类似于Java中的接口,Scala中的Trait可以被类和对象(Object)使用关键字extends来继承

创建特质的代码如下:

1      trait traitName

下面我们创建一个特质Animal,演示操作,代码如下:

//定义特质即接口
trait Animal{
  def speak()         //抽象方法(没有方法体的方法)
  def listen(): Unit ={
  }
  def run(): Unit ={
    println("I CAN RUNNING")
  }
}
//定义类继承特质
class Peo extends Animal{
  //继承抽象类或特质即接口时必须重写其抽象方法
  override def speak(): Unit = {
    println("I'm speaking Chinese")
  }
}
object people {
  def main(args: Array[String]): Unit = {
    val people = new Peo
    people.speak()
    people.run()
    people.listen()
  }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/770733.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号