scala的抽象类

抽象类
和Java语言一样,scala中也可以定义抽象类
定义
如果类的某个成员在当前类中的定义是不包含完整的,它就是一个抽象类
不完整定义有两种情况:
方法没有方法体(抽象方法) 变量没有初始化(抽象字段) 定义抽象类和Java一样,在类前面加上abstract关键字
// 定义抽象类
abstract class 抽象类名 {
// 定义抽象字段
val 抽象字段名:类型
// 定义抽象方法
def 方法名(参数:参数类型,参数:参数类型…):返回类型
}
抽象方法
示例
在这里插入图片描述
设计4个类,表示上述图中的继承关系
每一个形状都有自己求面积的方法,但是不同的形状计算面积的方法不同

步骤
创建一个Shape抽象类,添加一个area抽象方法,用于计算面积
创建一个Square正方形类,继承自Shape,它有一个边长的主构造器,并实现计算面积方法
创建一个长方形类,继承自Shape,它有一个长、宽的主构造器,实现计算面积方法
创建一个圆形类,继承自Shape,它有一个半径的主构造器,并实现计算面积方法
编写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)
  }
}

在这里插入图片描述
答案:

在这里插入图片描述

发布了139 篇原创文章 · 获赞 333 · 访问量 21万+

猜你喜欢

转载自blog.csdn.net/qq_45765882/article/details/104303010