抽象类

和Java语言一样,scala中也可以定义抽象类
定义:
如果类的某个成员在当前类中的定义是不包含完整的,它就是一个抽象类
不完整定义有两种情况:
1.方法没有方法体(抽象方法)
2.变量没有初始化(抽象字段)
定义抽象类和Java一样,在类前面加上abstract关键字

步骤:
1.创建一个Shape抽象类,添加一个area抽象方法,用于计算面积
2.创建一个Square正方形类,继承自Shape,它有一个边长的主构造器,并实现计算面积方法
3.创建一个长方形类,继承自Shape,它有一个长、宽的主构造器,实现计算面积方法
4.创建一个圆形类,继承自Shape,它有一个半径的主构造器,并实现计算面积方法
5.编写main方法,分别创建正方形、长方形、圆形对象,并打印它们的面积

// 创建形状抽象类
abstract class Shape {def area: Double
}// 创建正方形类
class Square(var edge: Double /*边长*/) extends Shape {// 实现父类计算面积的方法override def area: Double = edge * edge
}// 创建长方形类
class Rectangle(var length: Double /*长*/ , var width: Double /*宽*/) extends Shape {override def area: Double = length * width
}// 创建圆形类
class Cirle(var radius: Double /*半径*/) extends Shape {override def area: Double = Math.PI * radius * radius
}object Main6 {def main(args: Array[String]): Unit = {val s1: Shape = new Square(2)val s2: Shape = new Rectangle(2, 3)val s3: Shape = new Cirle(2)println(s1.area)println(s2.area)println(s3.area)}
}

抽象字段

在scala中,也可以定义抽象的字段。如果一个成员变量是没有初始化,我们就认为它是抽象的。

示例:
1.创建一个Person抽象类,它有一个String抽象字段WHO_AM_I
2.创建一个Student类,继承自Person类,重写WHO_AM_I字段,初始化为学生
3.创建一个Policeman类,继承自Person类,重写WHO_AM_I字段,初始化警察
4.添加main方法,分别创建Student/Policeman的实例,然后分别打印WHO_AM_I

/ 定义一个人的抽象类
abstract class Person6 {// 没有初始化的val字段就是抽象字段val WHO_AM_I:String
}class Student6 extends Person6 {override val WHO_AM_I: String = "学生"
}class Policeman6 extends Person6 {override val WHO_AM_I: String = "警察"
}object Main6 {def main(args: Array[String]): Unit = {val p1 = new Student6val p2 = new Policeman6println(p1.WHO_AM_I)println(p2.WHO_AM_I)}
}

scala定义抽象类与抽象字段相关推荐

  1. scala中使用特质中的抽象字段和实际字段

    Scala中,trait相当于Java中的接口,遇到需要使用Java接口的场景时,你就在scala中可以使用trait了. 我们知道Java中你可以实现多个接口,那么Scala中,你也可以继承多个tr ...

  2. scala中抽象类_Scala中的抽象类

    scala中抽象类 抽象类 (Abstract Class) In the Scala programming language, abstraction is achieved using abst ...

  3. Java声明定义抽象类_接口_继承_实现

    文章目录 声明定义抽象类 声明定义接口 派生类.抽象类.接口的继承要点 声明定义抽象类 public abstract class CRMSystem {public abstract Client ...

  4. java-字符串,抽象类与抽象

    1.堆内存与栈内存 Java把内存分成两种,一种叫做栈内存,一种叫做堆内存. 在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配.当在一段代码块中定义一个变量时,java就在栈中 ...

  5. day15笔记:抽象类和抽象类方法、接口、内部类

    抽象类和抽象类方法.接口.内部类 1.抽象类和抽象方法(abstract关键字) 2.接口 3.内部类 1.抽象类和抽象方法(abstract关键字) 1.abstract 抽象的 2.abstrac ...

  6. Java中定义抽象类Shape,其中包含抽象方法double getPeremeter( )求周长和double getArea( )求面积。 定义一个矩形类,继承此抽象类,并自行扩充成员变量和方法。

    Java中定义抽象类Shape,其中包含抽象方法double getPeremeter( )求周长和double getArea( )求面积. 定义一个矩形类,继承此抽象类,并自行扩充成员变量和方法, ...

  7. visual C#(十三)创建接口和定义抽象类

    参考书:< visual C# 从入门到精通> 第二部分 理解C#对象模型 第13章 创建接口和定义抽象类 文章目录 13.1 理解接口 13.1.11 定义接口 13.1.2 实现接口 ...

  8. php 抽象类 继承,PHP 抽象类继承抽象类时的注意点

    原标题:PHP 抽象类继承抽象类时的注意点 抽象类继承另外一个抽象类时,抽象类中,不能重写抽象父类的抽象方法.这样的用法,可以理解为对抽象类的扩展. 下面的例子,演示了一个抽象类继承自另外一个抽象类时 ...

  9. Django框架(10.Django中的模型类的定义以及模型类字段属性和选项)

    Django中的模型类的定义以及模型类字段属性和选项 1.模型类的定义 2.模型类属性命名限制 2.1字段类型和属性 2.2选项 1.模型类的定义 ORM:表就代表类,字段代表属性 模型类需要继承自m ...

最新文章

  1. 二.ubuntu14.04 3D特效设置
  2. HDLBits 系列(6)(Reduction)缩位运算符
  3. 数据仓库系列1-高质量数据建模
  4. 专业软件测试面试题汇总
  5. python基于happybase对hbase增删改查-thrift1
  6. Yii2 的快速配置 api 服务 yii2-fast-api
  7. 前端学习(2165):vuecli3配置文件的修改和查看
  8. 改不改,这是一个问题
  9. 解决mediawiki上传文件文件名是中文上传失败
  10. android代码重启设备,Android设备重启(reboot)---Android studio
  11. Ubuntu设置截图快捷键
  12. 基于R语言地理加权回归、主成分分析、判别分析等空间异质性数据分析
  13. dcpb连接mysql_MySQL Cluster 7.3.7+CentOS7集群配置入门 MySQL双管理节点配置入门
  14. 好用又好玩的微信小程序大全
  15. 《CCNet: Criss-Cross Attention for Semantic Segmentation》--阅读笔记-ICCV2019
  16. 在 Android 设备上搭建 Web 服务器
  17. 【毕业设计_课程设计】面向高考招生咨询的问答系统设计与实现(源码+论文)
  18. OpenVpnCentos8部署
  19. 《Consistent Video Depth Estimation》阅读笔记
  20. 上传本地.xlsx(.xls)文件,实现页面表格数据预览

热门文章

  1. selenium:学习资源
  2. 身份证号码对应地区-官方措辞:行政区划代码
  3. 学习dubbo框架的问题
  4. 【并行计算-CUDA开发】从零开始学习OpenCL开发(一)架构
  5. js正则表达式的使用详解
  6. javascript重置(base层)(。。。。不完整)
  7. SQL时间相关 - SQL日期,时间比较
  8. inux php pdo mysql 扩展
  9. 如何在OSCOMMERCE中安装中文语言包
  10. 前端开发中的性能那点事