有java背景的人,很清楚java是如何定义构造方法以及继承的。在scala里面,继承和java有些相似。但是构造方法的定义,就不大一样了,应该说是差别还是很大的。在java里面,定义构造方法,就是定义一个没有返回值类型的与类同名的方法。

如下:

package com.shihuc;public class Person
{  private String lastName; //姓  private String firstName; //名  private Person spouse; //配偶的Person对象  public Person(String fn, String ln, Person s)  {  lastName = ln; firstName = fn; spouse = s;  }  public Person(String fn, String ln)  {  this(fn, ln, null); //未婚时没有配偶  }  public String getFirstName()  {  return firstName;  }  public String getLastName()  {  return lastName;  }  public Person getSpouse()  {  return spouse;  }  public void setSpouse(Person p)  {  spouse = p;  }  public String introduction()  {  return "我的名字是," + firstName + " " + lastName +  (spouse != null ?  " 对方的名字是," + spouse.firstName + " " + spouse.lastName + " 。" :  " 。");  }
}

但是,scala里面,可以看到:

package lession2class Person(fn: String, ln: String, s: Person){val firstname = fnval lastname = lnvar suporse = sprintln("primary constructor")def this(fn : String, ln : String)  { this(fn, ln, null)}println("I am testing code")def introduction() : String =  {return "我的名字是, " + lastname + " " + firstname +  (if (suporse != null) {" 对方的名字是, " + suporse.lastname + " " + suporse.firstname + "。"}else {"。";  })      }
}object PersonTest{def main(args: Array[String]){var p = new Person("shihu", "CHENG")println(p.introduction())}
}

虽然scala的写法变得比java简洁了很多,这个是值得表扬的,但是构造函数的定义就有很大的不同。

  1. 先说主构造函数,也就是英文资料中说的primary constructor,它是和类的定义混杂在一起的,即定义类的时候,就指明了这个类的成员变量参数,还有,就是在类中,除了def定义的成员函数之外的所有操作,都可以看作是构造函数的行为组成部分,不管是变量赋值还是函数调用。而java的类定义和构造函数的定义是分开的。

  2. 再说派生的构造函数,即java中可以定义多个构造函数,这点,在java里非常简单,就是方法的重载呗。但是,在scala里面,要定义多个构造方法,就必须直接或则间接的调用主构造函数。而且调用的时候,必须通过关键字this来操作。正如上面scala代码中的辅助构造函数:

1 def this(fn : String, ln : String) {
2   this(fn, ln, null)
3 }

需要注意的是,辅助构造函数名必须是this,而且必须调用主构造函数实现参数的传递(直接或则间接,本例子是直接调用,因为只有一个辅助构造函数)。

  1. 在scala中,若有继承,那么,只有主构造函数才能将参数的值传递到父类的构造函数中去。

  2. 在scala中,若子类继承了父类,但是想在子类中重写父类的某个函数,则在子类中必须用关键字override对父类的函数进行改写, 否则会出现语法错误。要想调用父类的同名函数,可以通过super关键字进行,这点与java是一致的。

scala:Scala class的构造方法与继承相关推荐

  1. scala重载无参构造方法_Scala中的无参数方法

    scala重载无参构造方法 Scala无参数方法 (Scala parameterless method) A method which accepts no parameters from the ...

  2. python类继承中构造方法_第8.3节 Python类的__init__方法深入剖析:构造方法与继承详解...

    第8.3节Python类的__init__方法深入剖析:构造方法与继承详解 一.    引言 上两节介绍了构造方法的语法及参数,说明了构造方法是Python的类创建实例后首先执行的方法,并说明如果类没 ...

  3. java 由接口构造对象_Java学习笔记04——类和对象|抽象和接口|构造方法与继承...

    六.Java类 1.  Java中用关键字class来创建类. 2.  类中属性和方法称为类的成员;类的声明和方法要在同一个文件内,不同于C++. 3.  类的定义: [] class [extend ...

  4. java构造一个水果类_Java基础入门之Object类、匿名内部类、构造方法的继承解析...

    前言 大家好,我是Java进阶者.这篇文章我们主要介绍Java基础中的Object类.匿名内部类.构造方法的继承知识,一起来学习下吧! 一.Object类 1.Object类是所有类的父类,所有类都继 ...

  5. Scala学习之路 (六)Scala的类、对象、继承、特质

    一.类 1.类的定义 scala语言中没有static成员存在,但是scala允许以某种方式去使用static成员 这个就是伴生机制,所谓伴生,就是在语言层面上,把static成员和非static成员 ...

  6. Scala入门到精通——第九节 继承与组合

    主要内容 类的继承 构造函数执行顺序 方法重写 匿名类 多态与动态绑定 组合与继承的使用 1 类的继承 下类的代码演示了Scala类的继承 //Person类 class Person(name:St ...

  7. JAVA构造方法,继承关系和SUPER关键字

    SUPER可调用父类的构造方法,但要注意默认调用和参数调用. 同时,在继承类时,可以用SUPER调用其它非构造方法哟. class Test extends Object{public Test(){ ...

  8. 【二十一】Python全栈之路--构造方法_继承_登录注册

    文章目录 1. 构造方法__init__ 2. 单继承_多继承 2.1 单继承 2.2 多继承 3. super的深度理解 4. 注册_登录 4.1 注册 4.2 登录 5. 小练习 1. 构造方法_ ...

  9. 大数据基础之Scala——Scala数组方法,史上最全,只要你能全部背上即可成为万人敬仰的大佬,任何Scala随便戳戳!!!

    Scala数组 数组是一种可变的.可索引的数据集合.在Scala中用Array[T]的形式来表示java中的数组形式T[ ]. //声明一个数组对象 方法一:var numbers:[String]= ...

最新文章

  1. 三星教父逝世!李健熙缔造的商业传奇和争议人生
  2. 宁波机器人餐厅需要预约吗_可怕!顺德首家“机器人餐厅”开业!厨师要失业了吗?...
  3. url地址传参中文乱码处理
  4. ++实现 ipv6数据报_IPV6报文格式和IPV4有什么区别?
  5. python_知识点_字符串+数字+列表
  6. JDBC13 ORM02 Map封装
  7. 成员变量和局部变量详解
  8. php md5 验证,怎么核对md5?
  9. 使用360优化修复系统后导致无法上网 维护笔记
  10. grafana设置邮件监控报警
  11. 迅捷路由器造成计算机无法上网,迅捷FAST无线路由器设置好了却上不了网现象的原因及解决方法介绍...
  12. 指令流水线 —— 分类和多发技术
  13. 开源软件xxl-job的oracle版本
  14. python实现月份天数计算
  15. 2022亚太杯建模C题思路 : 是否全球变暖?小美赛数学建模 C题思路
  16. shogun-toolbox的安装与问题总结
  17. 【原创】Themida 2260 虚拟机 FISH 初探(一)
  18. 微信小程序直播如何提升人气
  19. 利用 Python 去除 PDF 水印(和图片水印原理一样)
  20. mysql创建触发器遇到的问题ERROR 1415 (0A000)

热门文章

  1. 官方暗示与TÜV莱茵合作? MIUI12真的不远了
  2. 昔日“宅男最爱”、视频播放器之王破产清算:4.5万元商标拍到950万元
  3. 微信暗黑模式终于来了!这次微信对苹果认怂了?腾讯张军回应...
  4. 被李小龙女儿起诉侵权后,真功夫态度强硬:不寻求和解,无更换商标计划
  5. 余承东谈华为6G:正在研发,还需要10年时间
  6. 卢伟冰再曝Redmi Note 8:拍照、续航、屏占比、手感都更好
  7. 苹果为提振销量疯狂试探!官网推出新福利:买买买更轻松
  8. 前端自动化打包工具--webpack
  9. 创建型模式、结构型模式和行为型模式_设计模式之创建型模式
  10. 大数据分析机器学习(一)之线性模型-年龄和心率关系