面向对象三大特性:封装、继承、多态

news/2024/6/29 12:16:08 标签: 面向对象

设计圆形类和三角形类,求面积。

1.封装:类里封装了数据和方法,封装实现了信息隐藏,保证了数据安全。

2.继承:圆形类和三角形类都是从形状类继承而来,父类和子类之间是一般和特殊(a kind of)的关系,圆形是形状的一种,三角形也是形状的一种。

3.多态:多态一般和继承有关。父类暂时没有图形的具体信息,所以暂时无法实现Area方法,定义为抽象类。需要在子类中实现(重写)父类的Area方法。不管是求什么形状的面积,main函数中永远是通过shape.Area求面积。(shape类似于C++的基类指针,可以指向派生类对象)

下面用冷门语言编写该程序:

import scala.math.sqrt

abstract class Shape
{
  def Area:Double
}

class Circle(_r:Double) extends Shape{
  var r:Double=_r
  def Area:Double={
    3.14*r*r
  }
}

class Triangle(_a:Double,_b:Double,_c:Double) extends Shape{
  var a:Double=_a
  var b:Double=_b
  var c:Double=_c
  def Area:Double={
    val l=(a+b+c)/2
    sqrt(l*(l-a)*(l-b)*(l-c))
  }
}

object ShapeArea {
  def main(args:Array[String]):Unit={
    var shape:Shape=new Circle(3.0)
    println(shape.Area)
    shape=new Triangle(3.0,4.0,5.0)
    println(shape.Area)
  }
}


http://www.niftyadmin.cn/n/5379476.html

相关文章

数据输入时,数据的类型不匹配

一、问题背景 数据输入时,数据类型不匹配。此时输入失败,变量的值还是原来的值。 说明: 变量如果不做初始化,它的值是不确定的。 良好的编程习惯:变量在定义时,进行初始化,eg&#xff1…

css篇---分辨率物理像素和逻辑像素

物理分辨率和逻辑分辨率 物理分辨率是生产屏幕时就固定的,它是不可改变的 -----电脑像素 逻辑分辨率是由软件决定的 【电脑的设置中可以修改分辨率】----css像素 设备像素比 dpr同一方向上的物理像素/css像素 (缩放比是1的情况) 假设dpr4/…

深入理解lambda表达式

深入理解ASP.NET Core中的中间件和Lambda表达式 var builder WebApplication.CreateBuilder(args); var app builder.Build(); app.Use(async (context, next) > { // Add code before request. await next(context);// Add code after request.}); 这段C#代码是用于设…

java8-使用流-2

筛选各异的元素 流还支持一个叫作aistinct的方法&#xff0c;它会返回一个元素各异(根据流所生成元素的hashcode和eguals方法实现)的流。例如&#xff0c;以下代码会筛选出列表中所有的偶数&#xff0c;并确保没有重复。图5-2直观地显示了这个过程。 List<Integer>number…

详解自定义类型:枚举与联合体!

目录 ​编辑 一、枚举类型 1.枚举类型的声明 2.枚举类型的优点 3.枚举类型的使用 二、联合体类型(共用体&#xff09; 1.联合体类型的声明 2.联合体的特点 3.相同成员的结构体和联合体的对比 4.联合体大小的计算 5.用联合体判断大小端 三.完结散花 悟已往之不谏&…

【打工日常】使用docker部署Dashdot工具箱

一、Dashdot介绍 dashdot是一个简洁清晰的服务器数据仪表板&#xff0c;基于React实现 &#xff0c;主要是显示操作系统、进程、存储、内存、网络这五个的数据。 二、本次实践介绍 1. 本次实践简介 本次实践部署环境为个人测试环境 2. 本地环境规划 本次实践环境规划&#xf…

html的超链接标签 a

超链接标签: a a标签有2个重要的属性&#xff0c;href和target属性。 href:必须具备&#xff0c;表示点击后会跳转到哪个页面 target:打开方式.默认是 _self.如果是 _blank则用新的标签页打开. 超链接href属性的使用展示 1.通过图片展示 示例代码 运行效果&#xff1a; 点…

【开源】SpringBoot框架开发学校热点新闻推送系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 新闻类型模块2.2 新闻档案模块2.3 新闻留言模块2.4 新闻评论模块2.5 新闻收藏模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 新闻类型表3.2.2 新闻表3.2.3 新闻留言表3.2.4 新闻评论表3.2.5 新闻收藏表 四、系统展…