我们知道scala中一切皆为对象,函数也是对象,数字也是对象,它是一个比java还要面向对象的语言。

定义scala的简单类

class Point (val x:Int, val y:Int)

上面一行代码就是一个scala类的定义:

  1. 首先是关键字class
  2. 其后是类名 Point
  3. 类名之后的括号中是构造函数的参数列表,这里相当于定义了对象的两个常量,其名称分别为x,y,类型都是Int

上面的类和下面的类是一致的,不过更精简了。

class Point (xArg:Int, yArg:Int) {
  val x = xArg
  val y = yArg
}

我们写一个main方法,看下如何使用这个Point类。

object App {
  def main(args : Array[String]) {
    val p = ,)
    println("point info(" + p.x + "," + p.y + ")")
  }
}

在main方法中通过val p = new Point(10,10)来初始化一个Point类的实例,然后就可以访问p.x和p.y字段了。

scala对象的构造函数

只是初始化字段的构造函数

如下Point类示例,在构造函数中初始化了isOrigin,表示此点是否为原点

class Point (val x:Int, val y:Int) {
  val isOriginal:Boolean = {
    x ==  && y ==
  }
}

上述代码中的isOriginal后面花括号内的内容是构造函数。

通过this定义的scala构造函数

class Point (val x:Int, val y:Int) {
  val isOriginal:Boolean = {
    x ==  && y ==
  }

  def this(xArg:Int) {
    println("hello, I'm this constructor")
    )
  }
}

如上述代码定义了一个只有一个参数的构造函数,这个构造函数调用了默认的构造函数,传了xArg,和0值。这样写的构造函数可以做初始化字段之外的事情。构造函数之间是可以通过this(...)相互调用的。

scala的继承

实现继承

下面我们实现一个Point的继承类TalkPoint这个Point具有可以把自己的坐标打印出来。

class TalkPoint(x:Int, y:Int) extends Point (x,y) {
  def talk() = {
    println("my position is ("+x+","+y+")")
  }
}

上面的TalkPoint类继承于Point,注意它的默认构造函数,x,y之前没有val的修饰,extends Point(x,y) 之后会自动调用基类的构造函数。我们可以通过下面代码,调用这个子类的talk方法

object App {
  def main(args : Array[String]) {
    val p = ,)
    p.talk()
  }
}

运行程序将输出:my position is (0,0)

重写基类的方法

下面我们再创建一个TalkPoint的子类,这个类叫HappyTalkPoint,该子类会重写TalkPoint的talk方法。如下代码:

class HappyTalkPoint(x:Int, y:Int) extends TalkPoint(x,y) {
  override def  talk() = {
    println("I'm happy")
    super.talk()
  }
}

在talk方法的def关键字前面有一个override关键字,来表示重写,这个关键字时必须的,否则编译器会报错;这一点和java中有所不同。在这个方法的实现里面我们先打印出了I'm happy,然后通过super.talk()调用了父类的方法。

我们修改下App类的main方法:

运行程序将会输出:

I'm happy
my position ,)

scala中的面向对象定义类,构造函数,继承的更多相关文章

  1. scala入门教程:scala中的面向对象定义类,构造函数,继承

    我们知道scala中一切皆为对象,函数也是对象,数字也是对象,它是一个比java还要面向对象的语言. 定义scala的简单类 class Point (val x:Int, val y:Int) 上面 ...

  2. Golang 中的 面向对象: 方法, 类, 方法继承, 接口, 多态的简单描述与实现

    前言: Golang 相似与C语言, 基础语法与C基本一致,除了广受争议的 左花括号 必须与代码同行的问题, 别的基本差不多; 学会了C, 基本上万变不离其宗, 现在的高级语言身上都能看到C的影子; ...

  3. Java面向对象-Java类的继承及super关键字

    Java面向对象-Java类的继承 1,继承定义以及基本使用 定义:子类能够继承父类的属性和方法: 注意点:Java中只支持单继承: 私有方法不能继承: 上代码: package com.java12 ...

  4. php面向对象:类的继承实例讲解

    什么是类的继承?说白了,我觉得就是提高代码使用效率的.下面我就给大家介绍下继承.大理石平台维修 类的继承概念 子类继承父类的所有成员变量个方法,包括构造方法,当子类被实例化时,php会现在子类中查询构 ...

  5. js中使用function定义类、实例化,函数的调用方法

    function Test002(name, age){ name, age, this.printInfo = function(){ //定义的公有方法 console.log(name, age ...

  6. scala学习笔记2(类,继承,抽象类)

    class Person{ // _ 是占位符; var name : String = _ val age : Int = 27 // private[this] 定义的内容无法外部使用,起到保护作 ...

  7. 22.python中的面向对象和类的基本语法

    当我发现要写python的面向对象的时候,我是踌躇满面,坐立不安呀.我一直在想:这个坑应该怎么爬?因为python中关于面向对象的内容很多,如果要讲透,最好是用面向对象的思想重新学一遍前面的内容.这个 ...

  8. Scala基础:面向对象之对象和继承

    对象 object 相当于 class 的单个实例,通常在里面放一些静态的 field 或者 method:在 Scala 中没有静态方法和静态字段,但是可以使用 object 这个语法结构来达到同样 ...

  9. (数据科学学习手札46)Scala中的面向对象

    一.简介 在Scala看来,一切皆是对象,对象是Scala的核心,Scala面向对象涉及到class.object.构造器等,本文就将对class中的重点内容进行介绍: 二.Scala中的类 2.1 ...

随机推荐

  1. BZOJ1017: [JSOI2008]魔兽地图DotR

    传送门 设$f[i][j][k]$表示对于第$i$个点,向父节点贡献$j$个已合成的装备,花费了$k$的代价,最多获得的力量值. 单纯的$f[i][j][k]$是很难转移的,主要原因是无法维护和其他儿 ...

  2. html页面输入框input的美化

    input输入框是网页必不可少的组件,可是每个浏览器对于输入框的显示样式各有不同 例如:    上图分别就是谷歌浏览器和IE浏览器自带显示的输入框,样式也不足人意,所以大多都会自己写样式 以下是一个简 ...

  3. log4net各种Filter使用【转】

    log4net各种Filter使用[转] log4net里面的filter类常用的为:      1.DenyAllFilter         拒绝所用的日志输出         <filte ...

  4. 每日学习笔记:js中可以直接用id名调用的问题?

    在JavaScript中,标准的id选择器调用语法是: document.getElementById('myid').style.width = pc + "%"; 但是,今天发 ...

  5. mysql中find_in_set()函数的使用

    首先举个例子来说: 有个文章表里面有个type字段,它存储的是文章类型,有 1头条.2推荐.3热点.4图文等等 .现在有篇文章他既是头条,又是热点,还是图文,type中以 1,3,4 的格式存储.那我 ...

  6. [Redis]发布/订阅

    摘要 有这样的一个场景,管理员需要发布一条消息,所有的客户端都要受到通知.然后想到了发布订阅模式.使用redis的发布与订阅实现起来更简单一些,说做就做,这里弄个简单的demo,先模拟下. 核心代码 ...

  7. ThinkPHP3.2.3整合smarty模板(一)

    一.php模板引擎有哪些? 1.1 PHPLIB:一套古老且主流的模板引擎,直接在html中使用PHP变量进行编程: 1.2 Template Blocks:一款轻巧且速度非常快的PHP模板引擎,支持 ...

  8. javascript数据结构与算法--链表

    链表与数组的区别?  1. 定义: 数组又叫做顺序表,顺序表是在内存中开辟一段连续的空间来存储数据,数组可以处理一组数据类型相同的数据,但不允许动态定义数组的大小,即在使用数组之前必须确定数组的大小. ...

  9. Holt-Winters原理和初始值的确定

      关于模型 (来自以下PPT,从第4页开始)   关于初始值: 以下文档给出了三个模型的初始值计算的思路. 大致思路如下,建立一个p阶移动平均模型,估计出参数即为初始值,具体的根据三种不同的模型,有 ...

  10. thinkphp3.2.3之自动完成的实现

    有时候,我们希望系统能够帮我们自动完成一些功能,比如自动为密码加密,忽略空等,这个时候我们就需要利用到自动完成(填写)的功能. ThinkPHP 模型层提供的数据处理方法,主要用于数据的自动处理和过滤 ...