Scala中继承介绍

【Scala面向对象】31、继承 在 Scala 中,继承是一种面向对象编程的基本特性,用于创建一个类(子类)从另一个类(父类)继承属性和方法。Scala 使用关键字extends来实现类的继承关系。 阅读详情

​点击蓝字之后,我们就是好朋友了啦

 

 

 

扩展类

 

Scala扩展类的方式和Java一样,使用extend关键字:

class Employee extends Person {
  val salary = 0.0
}

如上面代码所示,和Java一样在定义中给出了子类需要而父类没有的字段和方法,或者根据实际情况重写父类中的方法。

 

我们也可以将类声明为final,这样就不可以被扩展了(即不可被其他类继承),当然也可以在单个字段或者方法上声明final,以确保他们不被重写。

注意:Java中final字段是不可变的,类似Scala中的val。

 

 

重写方法

 

在Scala中重写一个非抽象方法必须使用override修饰符。例如:

class Person {
  def description() = "this is a person."
}

class Employee extends Person {
  val salary = 0.0
  override def description(): String = "this is a employee"
}

override修饰符可以在多个常见情况下给出有用的错误提示,包括:

  1. 当你拼错了要重写的的方法名。

  2. 当你不小心在新方法中使用了错误的参数类型。

  3. 当你在超类中引入了新的方法,而这个新的方法与子方法相抵触。

 

在Scala中调用超类的方法和Java一样,使用super关键字:

class Person {
  def description():String = "this is a person."
  def name(): String = {
    "jason"
  }
}

class Employee extends Person {
  val salary = 0.0
  override def description(): String = {
    super.name // 调用父类中的name方法
    "this is a employee"
  }
}

 

 

类型检查和转换

 

要测试某个对象是否属于某个给定的类,可以用isInstanceOf方法,如果测试成功你可以用asInstanceOf方法将引用转换为子类的引用。

if (emp.isInstanceOf[Employee]){
      // employee 即为 Employee 类型
      val employee = emp.asInstanceOf[Employee]
    }

 

 

超类的构造

 

类有一个主构造器和任意数量的辅助构造器,而每个辅助构造器都必须以对先前定义的辅助构造器或主构造器的调用开始。这样的话,辅助构造器永远不可能直接调用超类的构造器。子类的辅助构造器最终都会调用主构造器。只有主构造器才会调用超类的构造器。

我们定义一个子类和调用超类构造器的主构造器

abstract class Per(name: String, age: Int) {
   
}

class Employee(name: String, age: Int, salary: Double)
  extends Per(name, age) {
   
}

将类和构造器定义在一起更加精简代码,把主构造器的参数当做是类的参数更加容易理解。子类中的name,age参数通过超类中的参数来传递。

 

我们可以使用Java来进行相同的定义与Scala进行对比

class Person {
        private String name;
        private Integer age;

        Person(String name, Integer age) {
            this.name = name;
            this.age = age;
        }
    }

    class Employee extends Person {
        private Double salary;

        Employee(String name, Integer age, Double salary) {
            super(name, age);
            this.salary = salary;
        }
    }

 

 

抽象字段、方法

 

和Java一样,我们可以使用abstract关键字来标记不能被实例化的类,这是因为它的某个字段或类没有被完整定义。

abstract class Per(name: String, age: Int) {
  val address: String // 没有初始化,抽象字段,带有默认的getter和setter方法
  def id: Int // 定义一个抽象方法,没有方法体
}

class Employee(name: String, age: Int, salary: Double)
  extends Per(name, age) {
  def id: Int = name.hashCode // 不需要overwrite关键字就可以重写超类中的抽象方法
  val address: String = "china"
}

 

 

 

 

 

长按识别图中二维码

关注获取更多资讯

深入剖析:NAND Flash与SD NAND(贴片式SD卡)存储扇区分配表架构差异与优化策略 本文深入探讨了NAND Flash与SD NAND(贴片式SD卡)在存储技术中的架构差异及其优化策略。NAND Flash作为非易失性存储器,依赖主控芯片进行坏块管理和磨损均衡,而SD NAND则通过内置控制器和标准文件系统(如FAT)简化了存储管理。两者在写入性能、容量扩展和可靠性方面各有优劣,NAND Flash需通过磨损均衡和写入合并优化性能,而SD NAND则通过高容量和高速传输提升效率。文章为嵌入式系统开发者和硬件工程师提供了关于如何根据需求选择并优化存储介质的参考。 阅读详情

相关推荐

从命令到对话:LLM如何重塑车载语音交互与软件定义汽车体验

自动语音识别和自然语言处理是智能交互的核心基础技术,它们使机器能够理解和响应人类语音指令。其原理在于通过声学模型和语言模型将声音信号转化为文本,再解析文本背后的用户意图。这项技术的价值在于提供了一种自然、高效且能解放双手的人机交互方式,极大地提升了在特定场景(如驾驶)下的安全性与便利性。随着技术演进,其应用场景已从简单的命令控制扩展到复杂的多轮对话和跨域任务执行。当前,软件定义汽车的架构变革为车载语音提供了统一的控制平台,而大型语言模型的引入则带来了范式革命,使其从功能触发器进化为真正的智能任务执行者。本文

weixin_42669344的博客 563

Scala面向对象编程之继承

文章目录1. Scala中继承(extends)的概念2. Scala中override 和 super 关键字3. Scala中isInstanceOf 和 asInstanceOf4. Scala中getClass 和 classOf5. Scala中抽象类6. Scala中抽象field 1. Scala中继承(extends)的概念 (1)、Scala 中,让子类继承父类,与 Java 一...

power_k的博客 763

H3C交换机Console口连接全攻略:从接线到PuTTY配置(附常见问题排查)

本文详细介绍了H3C交换机Console口的连接与配置方法,包括硬件线缆选择、驱动安装、PuTTY参数设置及常见问题排查。特别针对Console转USB线缆的兼容性和驱动安装难点提供实用建议,帮助网络工程师快速掌握串联调试技巧,解决连接中的黑屏、乱码等典型问题。

weixin_42549451的博客 674

Scala 系列(九)—— 继承和特质

一、继承 1.1 Scala中的继承结构 Scala 中继承关系如下图: Any 是整个继承关系的根节点; AnyRef 包含 Scala Classes 和 Java Classes,等价于 Java 中的 java.lang.Object; AnyVal 是所有值类型的一个标记; Null 是所有引用类型的子类型,唯一实例是 null,可以将 null 赋值给除了值类型外的所有类型...

weixin_30362083的博客 363

Python实战:3种高效方法将txt转csv(附pandas对比测试)

本文针对Python中将txt文件转换为csv格式的需求,深度评测了open()、csv模块和pandas三种主流方法。通过详尽的性能对比测试,从执行效率、内存占用和适用场景等维度提供选型指南,帮助开发者根据数据规模与复杂度选择最高效的转换方案。

weixin_29073241的博客 261

C++ muduo网络库知识分享01 - Linux平台下muduo网络库源码编译安装

Muduo is a multithreaded C++ network library based on the reactor pattern. muduo库的介绍就是:一个基于reactor反应堆模型的多线程C++网络库。 muduo网络库是C++语言开发的一个非常优秀的网络库,作者陈硕,muduo网络库在多线程环境下性能非常高,该系列文章会分享一些muduo库源码的知识,包括它的线程池源码...

大秦坑王的专栏 3万+

Scala面向对象编程之基继承上篇、extends的概念、override 和 super 关键字、isInstanceOf 和 asInstanceOf、getClass 和 classOf 11

1. Scala中继承(extends)的概念 Scala中,让子类继承父类,与Java一样,也是使用extends关键字; 继承就代表,子类可以继承父类的field和method,然后子类还可以在自己的内部实现父类没有的,子类特有的field和method,使用继承可以有效复用代码; 子类可以覆盖父类的field和method,但是如果父类用final修饰,或者field和method用fin...

啊策策大数据社区 389

手把手教你学Simulink——基于Simulink的全双工无线通信仿真建模示例

目录手把手教你学Simulink——基于Simulink的全双工无线通信仿真建模示例一、背景介绍二、所需工具和环境三、步骤详解步骤1:创建Simulink模型步骤2:设计输入信号步骤3:添加调制模块步骤4:添加自干扰消除模块步骤5:添加AWGN信道步骤6:添加接收端处理步骤7:添加解调模块步骤8:计算误码率(BER)步骤9:添加显示模块步骤10:设置仿真参数步骤11:运行仿真并分析结果四、总结 全双工(Full-Duplex)无线通信技术允许在同一频段上同时进行数据的发送和接收,这与传统的半双工(Half-

MHD0815的博客 182

Scala的继承和抽象类

实际开发中, 我们发现好多类中的内容是相似的(例如: 相似的属性和行为), 每次写很麻烦. 于是我们可以把这些相似的内容提取出来单独的放到一个类中(父类), 然后让那多个类(子类)和这个类(父类)产生一个关系, 从而实现子类可以访问父类的内容, 这个关系就叫: 继承.因为scala语言是支持面向对象编程的,我们也可以使用scala来实现继承,通过继承来减少重复代码。

黑马程序员官方博客 764

国产FPGA高云GW1NSR-4C,集成ARM Cortex-M3硬核

从板子整体角度来看,这是一款国产化程度很高的板子,从主控FPGA,到JTAG芯片,存储芯片、电源芯片等,都是使用的国产半导体公司的产品。板子整体尺寸也比较迷你,属于小而美类型的,可以认为是一款FPGA核心板,当然也预留了排针接口,给用户足够的扩展空间。对于想了解高云小蜜蜂SoC软硬件开发,以及对云源软件、MCU开发环境做个深度评测来说足够了。JTAG调试器固件可以增加虚拟串口功能,对于板子本来来说面积不会有改动,只需要添加两根信号线即可。

whik1194的博客 6396

GIS数据处理-使用PostGIS+QGIS

GIS数据处理1-使用PostGIS+QGIS 介绍 这里我遇到了一个需求,需要将SQLite的.db数据库中GIS数据导出成shapefile文件 数据库的表结构如下所示,这里存储的是wkt格式的矢量数据 WKT与WKB格式介绍 OpenGIS 规范定义了两种表示空间对象的标准方式:Well-Know Text (WKT) 形式和Well-Known Binary(WKB) 形式。WKT 和 WKB 都包含矢量几何要素的对象类型和构成对象的坐标的信息。WKT可读性强,更方便阅读识别,而在实际数据传输和存

孙霸天的专栏 2527

Scala继承

Option里面还有一个对象叫None对象,None对象就是返回的东西是空,当返回东西为空时它会返回一个None,如果有东西就会封装到Some对象里面作为Some返回来。只要返回值是Option类的,这些返回值最终返回的结果都会被封装成Some对象返回来。所有引用类型的对象都是存在堆当中的。的抽象类,所有的类都是从这里继承下来的。这个子类的,可以实例化,它的对象被实例化之后都是被保存在。,不可实例化,这些叫做值类型,它的值最终都是被放在。是所有类的子类,没有实例,用做错误处理和异常处理。

XQC_KKK的博客 1405

【即插即用模块】Transformer篇 | CVPR 2025 | D2T:双域特征融合,完美适配缺陷检测/小目标检测和分割等频域细节敏感的任务!

本文提出了一种基于小波和原型增强的双域Transformer(WPFormer)用于像素级表面缺陷检测。该模型通过Dual-domain Transformer (D2T)模块融合频域和空间域特征:小波增强交叉注意力(WCA)分解高低频特征并加权平衡,增强缺陷细节捕捉;原型引导注意力(PCA)生成全局原型向量强化关键信息聚合。实验表明,该模块在缺陷检测任务中性能优于现有方法,通过频域细节增强和全局依赖建模有效提升了复杂场景下的检测效果。代码已开源,适用于对频域敏感的目标检测和分割任务。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 1374

Scala(类、方法、对象、继承,tarit)超详细介绍

类、方法、对象、继承、特质 Scala的类与Java、C++的类比起来更简洁,学完之后你会更爱Scala!!! 1.1. 类 1.1.1. 类的定义 package cn.bw.class_demo /** 在Scala中,类并不用声明为public类型的。 Scala源文件中可以包含多个类,所有这些类都具有共有可见性。 */ class Person { //用val修饰的变量是...

优快云_bird的博客 1478

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

scala的继承关系

【代码】scala的继承关系。

2401_84163644的博客 313

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Scala类的继承

2,继承的好处:继承可以复用代码和实现多态。继承就代表子类可以继承父类的特性并且子类可以在自己内部实现父类没有的特性,以实现代码的复用和多态特性。1,继承的定义:scala中继承的定义为原有类的基础上定义一个新类,原有类称为父类,新类称为子类。下面举例说明Scala抽象类的使用。定义一个抽象类,并调用它们。抽象类语法:abstract class A{}抽象类的定义:抽象类是一个不能被实例化的类。(3)具体方法和成员。

GZM1314YMX的博客 181

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Scala的继承

Scala中的继承是指在原有的类的基础上定义一个新类,原有的类称为父类,新类成为子类。

2401_87187379的博客 536

Scala的继承(不劳而获)

Scala中继承的定义为在原有类的基础上定义一个新类,原有类称为父类,新类称为子类。【问】当子类从父类继承的方法不能满足需要时,子类需要有自己的行为,怎么办?定义:在原有的基础上定义一个新类,原有类称为父类,新类称为子类。class 子类名 extends 父类名 { 类体 }先执行父类构造器,再执行子类构造器。

Betty_at的博客 645

Scala中的继承和重写

【代码】Scala中的继承和重写。

yuhuhuh的博客 183

scala继承

Scala中继承的定义为在原有类的基础上定义一个新类,原有类称为父类,新类称为子类。当子类从父类中继承的方法不能满足需要时,子类需要有自己的行为,怎么办?

2401_87129116的博客 347

Scala的继承和多态

Scala中的继承的定义为在原有类的基础上定义一个新类,原有类称为父类,新类称为子类。一个变量在声明时,使用lazy进行修饰,那么这个变量只有在使用的时候赋值。子类继承父类使用关键字。

2401_87076736的博客 291

scala中继承的运用

当子类从父类继承的方法不能满足需要时,子类需要有自己的行为,此时使用 override 可以重写父类的方法。class 子类名 extends 父类名 { 类体 }定义:在原有类的基础上定义一个新类,原有类成为父类,新类称为子类。override def 方法名(参数可选){ }

2402_83590031的博客 391

第七章 Scala基础——类继承

一、Scala的类继承 在面向对象编程里,为了节省代码量,也为了反映实际各种类之间的联系,通常采取两种策略:包含和继承。包含代表了一种has-a的关系,也就是一个类包括了另一个类的实例。例如,午餐的菜单含有水果,那么就可以先编写一个水果类,然后再编写一个午餐类,并在午餐类里包含水果类的对象,但这两者没有必然联系。继承代表了一种is-a的关系,也就是从一个宽泛的类可以派生出更加具体的类。例如,编写...

qq_34291505的博客 9533

scala中的继承与多态

scala中继承的定义为在原有类的基础上定义一个新类,原有类称为父类,新类称为子类。在scala中,子类继承父类使用关键字extends ,这一点与java相同。在scala中通过override关键字实现重写方法。

2402_84283145的博客 289

scala中trait的多继承

【代码】scala中trait的多继承。

2301_82185678的博客 345

Scala之继承

语法: class 子类名 extends 父类名 { 类体 } (1)子类继承父类的属性和方法 (2)scala是单继承 注意事项: 1.继承的子类能够直接使用父类的属性和方法 2.继承是运行父类的构造器 3.在运行子类的主构造器之前会先运行父类的主构造器 4.继承的本质是在类声明中单独继承一个父类的构造器 5.在继承父类的有参构造器的时候,需要保证子类的主构造器参数要多于继承的构造器,并且名字是相同的 class Person(){ println("父类的主构造器").

lslslslslss的博客 1670
上一篇: Scala中对象介绍
下一篇: Scala中特质介绍
geek-wmy
博客等级 码龄9年 322粉丝 126原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值