在scala里,类继承有两点限制:

  • 重写方法需要使用override关键字;
  • 只有主构造函数才能往父类构造函数中传参数。

在java1.5中引入了override注解,但不强制使用。不过在scala中要想重写方法必须使用override关键字。如果确实重写了父类的方法又不使用override关键字的话,则会在编译时报错,提示没有使用override修饰符。

scala的副构造函数必须调用主构造函数或是另一个副构造函数。只有在主构造函数中才能向父类的构造函数中传递数据。可以看出来主构造函数如同父类和子类中间的一道关卡:它既负责完成子类的初始化,也负责与父类的沟通。

下面的这段代码演示了下上述内容:

class Vehicle(val id: Int, val year: Int) {
override def toString(): String = "ID: " + id + " Year: " + year
} class Car(override val id: Int, override val year: Int, var fuelLevel: Int) extends Vehicle(id, year) {
override def toString(): String = super.toString() + " Fuel Level: " + fuelLevel
} val car = new Car(1, 2009, 100)
println (car)

在代码中定义了两个类:Vehicle和Car。Car继承了Vehicle。在继承的时候,因为要向父类传递参数,所以Car类主构造函数的一部分必须能匹配父类的构造函数。因为Car类构造函数中的id和year两个成员变量源自父类Vehicle,所以需要使用override关键字修饰。此外,因为这两个类都重写了java.lang.Object的toString方法,所以重写的方法前面需要使用override关键字修饰。

看一下执行结果:

就这样!

###########

scala学习手记13 - 类继承的更多相关文章

  1. scala学习手记11 - 类定义

    这里会通过与Java比较的方式来说明scala是如何创建类的. 先来看一下Java中是如何定义一个类的: public class Car { private final int year; priv ...

  2. scala 学习笔记十二 继承

    1.介绍 继承是面向对象的概念,用于代码的可重用性.可以通过使用extends关键字来实现继承. 为了实现继承,一个类必须扩展到其他类,被扩展类称为超类或父类.扩展的类称为派生类或子类. Scala支 ...

  3. scala学习手记35 - 隐式类型转换

    先来看一下下面的内容: 2 days "ago" 5 days "from_now" 如上的内容具体应该是什么呢?不过怎么看也不像是代码.不过既然是在学代码,拿 ...

  4. scala学习手记12 - 字段、方法和构造函数

    在上一节创建了一个scala类,如果没有更多的方法,scala类的定义还可以更简单一些,看一下下面这个CreditCard类的定义: class CreditCard(val number: Int, ...

  5. scala学习手记10 - 访问修饰符

    scala的访问修饰符有如下几个特性: 如果不指定访问修饰符,scala默认为public: 较之Java,scala对protected的定义更加严格: scala可以对可见性进行细粒度的控制. s ...

  6. [Scala]Scala学习笔记四 类

    1. 简单类与无参方法 class Person { var age = 0 // 必须初始化字段 def getAge() = age // 方法默认为公有的 } 备注 在Scala中,类并不声明为 ...

  7. scala学习手记18 - Any和Nothing

    Any 前面已经有两次提到过:在scala中,Any类是所有类的超类. Any有两个子类:AnyVal和AnyRef.对应Java直接类型的scala封装类,如Int.Double等,AnyVal是它 ...

  8. scala学习手记9 - =和==

    = 赋值运算 scala的赋值运算和java的有着很大的不同.如a=b这样的赋值运算,在Java中返回值是a的值,在scala中返回的则是Unit(Unit是值类型,全局只存在唯一的值,即(),通常U ...

  9. scala学习手记6 - 字符串与多行原始字符串

    scala中的字符串类就是java中的java.lang.String类.不过scala也为String提供了一个富封装类:scala.runtime.RichString. scala可以将java ...

随机推荐

  1. 【VUE】VUE相关学习和知识备份

    一.学习资料参考 1.1.Vue.js 官网:Vue.js https://cn.vuejs.org/ 官方文档:介绍 - Vue.js https://cn.vuejs.org/v2/guide/ ...

  2. squid3认证配置

    在使用squid3的时候为了安全我们通常添加基于账号密码的认证方便管理也防止被检测 1. 密码文件准备 密码配置我们使用htpasswd配置,htpasswd可以自己安装如果找不到就直接安装apach ...

  3. img标签使用onload进行src更改时出现的内存溢出问题

    最近在开发时需要在img标签加载完成后修改src属性,使用了onload方法. 但是在方法体中最后没有把onload事件指向null, 导致了循环调用onload方法,CPU占用一直居高不下,最后只要 ...

  4. 解决 apt-get the following packages has unmet dependencies 问题

    安装vpn遇到以下问题: 显示flinux print util和openconnect存在依赖库的冲突 此时尝试安装新的tk.vpnc-scripts.libopenconnect5,尝试apt-g ...

  5. 【我的Android进阶之旅】如何快速寻找Android第三方开源库在Jcenter上的最新版本

    问题描述 解决方法 先了解compile comsquareupokhttpokhttp240的意义 了解Jcenter和Maven jcenter Maven Central 理解jcenter和M ...

  6. Leetcode注意

    List<List<Integer>> res = new ArrayList<>();

  7. 0601-Zuul构建API Gateway-API gateway简介、基础使用、路由配置、负载配置

    一.API Gateway简介 参看:http://www.cnblogs.com/bjlhx/p/8794437.html 二.zuul简介[路由器和过滤器:Zuul] 在微服务架构的组成部分进行路 ...

  8. node.js---sails项目开发(6)--- 实现分页功能

    只需要添加一个文件即可  api/blueprints/find.js     代码如下 /** * Module dependencies */ var util = require('util') ...

  9. C#多线程同步案例实操

    好久没有写博客了,为了养成学习的习惯,培养积极年轻的心态,又回到了博客园这个平台继续撸起时隔多年未光顾的空间. 项目需求: 实现一个简单的获取始发目的耗时.距离,将结果输出表格. 方案思路: 通过多线 ...

  10. JavaScript:关闭当前页面(微信、电脑)

    WeixinJSBridge.call('closeWindow'); // 关闭微信浏览器 window.opener=null; window.open('','_self'); window.c ...