抽象类为什么有抽象方法?

以一个简单的图形绘制程序为例,其中我们将创建一个抽象类`Shape`,它定义了所有形状共有的行为和属性,同时允许具体的子类提供自己的实现。

 

首先,我们定义一个抽象类`Shape`:

 

```java

public abstract class Shape {

    // 形状的共有属性,颜色

    protected String color;

 

    // 构造函数,设置形状的颜色

    public Shape(String color) {

        this.color = color;

    }

 

    // 抽象方法,计算形状的面积

    public abstract double calculateArea();

 

    // 抽象方法,计算形状的周长

    public abstract double calculatePerimeter();

 

    // 非抽象方法,显示形状的颜色

    public void displayColor() {

        System.out.println("The shape is " + color + ".");

    }

}

```

 

在这个`Shape`类中,我们定义了一个保护属性`color`,它存储了形状的颜色。我们还定义了两个抽象方法`calculateArea()`和`calculatePerimeter()`,它们要求子类提供具体的实现来计算面积和周长。

此外,我们还提供了一个非抽象方法`displayColor()`,它用来输出形状的颜色信息。

 

接下来,我们创建两个具体的子类`Circle`和`Rectangle`,它们继承自`Shape`类,并实现抽象方法:

 

```java

public class Circle extends Shape {

    private double radius;

 

    // 构造函数

    public Circle(String color, double radius) {

        super(color);

        this.radius = radius;

    }

 

    // 实现计算面积的方法

    @Override

    public double calculateArea() {

        return Math.PI * radius * radius;

    }

 

    // 实现计算周长的方法

    @Override

    public double calculatePerimeter() {

        return 2 * Math.PI * radius;

    }

}

 

public class Rectangle extends Shape {

    private double width;

    private double height;

 

    // 构造函数

    public Rectangle(String color, double width, double height) {

        super(color);

        this.width = width;

        this.height = height;

    }

 

    // 实现计算面积的方法

    @Override

    public double calculateArea() {

        return width * height;

    }

 

    // 实现计算周长的方法

    @Override

    public double calculatePerimeter() {

        return 2 * (width + height);

    }

}

```

 

在`Circle`和`Rectangle`类中,我们添加了各自的属性,并提供了计算面积和周长的具体实现。这样,我们就可以根据具体的图形类型来创建对象,并使用它们的方法。

 

最后,我们可以创建一个简单的测试程序来演示这些类的使用:

 

```java

public class ShapeDemo {

    public static void main(String[] args) {

        // 创建一个圆形对象

        Circle circle = new Circle("Red", 5.0);

        // 创建一个矩形对象

        Rectangle rectangle = new Rectangle("Blue", 4.0, 6.0);

 

        // 显示形状的颜色

        circle.displayColor();

        rectangle.displayColor();

 

        // 计算并显示圆形的面积和周长

        System.out.println("Circle area: " + circle.calculateArea());

        System.out.println("Circle perimeter: " + circle.calculatePerimeter());

 

        // 计算并显示矩形的面积和周长

        System.out.println("Rectangle area: " + rectangle.calculateArea());

        System.out.println("Rectangle perimeter: " + rectangle.calculatePerimeter());

    }

}

```

 

在这个`ShapeDemo`类的`main`方法中,我们创建了一个红色的圆形和一个蓝色的矩形。我们调用了`displayColor()`方法来显示它们的颜色,以及调用了`calculateArea()`和`calculatePerimeter()`方法来计算和显示它们的面积和周长。

 

这个简单的例子展示了抽象类如何定义共有的行为和属性,以及具体的子类如何提供这些行为的具体实现。通过这种方式,我们可以创建一个灵活且可扩展的图形绘制程序,它可以轻松地添加新的形状类型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/791935.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mongodb 基础查询使用

环境安装 https://blog.csdn.net/qq_42402648/article/details/134932412 net start MongoDB 启动 net stop MongoDB 停止测试插入数据结构 {"create_time": {"$data": "1711244538176"},"language": "en","create_ti…

AI绘画:Stable Diffusion的高效操作界面,ComfyUI:安装和使用篇

前言 Stable Diffusion(简称SD)是一款强大的AI绘画工具,通常通过Web UI操作界面进行使用。然而,对于那些寻求更高效率和个性化工作流的用户来说,ComfyUI提供了一个基于节点流程的操作界面,使得工作流定制更…

文献分享:《Clinical metagenomics》

摘要|临床宏基因组下一代测序(mNGS)是对患者样本中微生物和宿主遗传物质(DNA和RNA)的综合分析,目前正迅速从研究向临床实验室发展。这种新兴的方法正在改变医生诊断和治疗传染病的方式,其应用涉及广泛的领域…

Java快速入门系列-1(Java概述)

第一章:Java概述 1.1 Java的发展历程1.2 Java的特点与优势1.2.1 特点1.2.2 优势 1.3 Java生态系统介绍1.4 Java在当前技术领域的应用案例 1.1 Java的发展历程 Java语言由Sun Microsystems公司于1995年推出,由James Gosling领导的Green Team小组研发而成…

【深度学习】入门深度学习相关

1.知识点&&小问题 参考视频:最详细的 Windows 下 PyTorch 入门深度学习环境安装与配置 CPU GPU 版 | 土堆教程 1.Pytorch和TensorFlow都是python的包/库。 2.为什么使用Anaconda?Anaconda的优势是有虚拟环境。 3.计算机底层对于Python语言&…

git branch 是干什么的

git branch 是 Git 版本控制系统中的一个命令,用于列出、创建、删除和重命名仓库中的分支。分支在 Git 中是一个非常重要的概念,它允许开发者在主线(通常是 master 或 main 分支)之外创建新的开发线,以在不干扰主线的情…

关于C#操作SQLite数据库的一些函数封装

主要功能:增删改查、自定义SQL执行、批量执行(事务)、防SQL注入、异常处理 1.NuGet中安装System.Data.SQLite 2.SQLiteHelper的封装: using System; using System.Collections.Generic; using System.Data.SQLite; using System.…

WebGL BabylonJs 如何切换相机

根据不同场景,可能会有多个相机切换的需求 ,通过scene.activeCamera即可实现。 例如: // 1、创建多个相机const freeCamera new BABYLON.FreeCamera(FreeCamera,new BABYLON.Vector3(-50, -8, -16),scene,)const arcRotateCamera new BAB…

深入理解JavaScript - 箭头函数中的this永远指向全局对象?

箭头函数中的this永远指向全局对象? 不是!!!!!! 箭头函数并没有自己的this值,它捕获定义时所在上下文的this值作为自己的this值。 也就是说,箭头函数中的 this是在定义…

天眼护航 安全无界:天通哨兵PS02—电力巡检保护的智能利器

在电力行业中,输电线路的安全稳定运行对于保障社会经济活动至关重要。然而,广阔的输电线路常常穿越复杂的地形和恶劣的自然环境,给电力巡检和保护工作带来了巨大挑战。 为了提高巡检效率和响应速度,更好地保障电力设施的安全运行…

Opencv人机交互界面设置

Opencv人机交互界面设置 以下是一些常见的OpenCV人机交互界面设置: 窗口交互 显示窗口:可以使用cv2.imshow()函数在屏幕上显示图像。例如,要显示名为“image”的图像,可以使用以下代码: import cv2img cv2.imread…

前端三剑客 —— CSS (第三节)

目录 上节回顾: 1.CSS使用有以下几种样式; 2.选择器 1.基本选择器 2.包含选择器 3.属性选择器 [] 4.伪类选择器 : 5.伪元素选择器 ::before :after 3.常见样式的使用 常见样式参考表 一些特殊样式 媒体查询 自定义字体 变换效果 translate&…

深入PostgreSQL中的pg_global表空间

pg_global表空间的位置 在PG当中,一个实例(cluster)初始化完以后,你会看到有下边两个与表空间相关的目录生成: $PGDATA/base $PGDATA/global 我们再用元命令\db以及相关视图看看相应的表空间信息: postgres# \db …

雨云服务器:当清风遇上明月,服务器的美好新时代

引言:为什么说服务器是网站的“心脏”? 在数字时代,网站已经成为企业和个人展示自己的重要平台。然而,想要网站运行得稳定、快速,除了好的内容外,一个稳定、高效的服务器也是至关重要的。就像人体需要有一…

【解决】Unity Profile | FindMainCamera

开发平台:Unity 2020.3.7f1c1 关键词:FindMainCamera   问题背景 ModelViewer 是开发者基于 UnityEngine 编写的相机控制组件。ModelView.Update 中调度52次并触发3次GC.Collect。显然并不期望并尽可能避免 Update 造成的GC 问题。事实上 FindMainCame…

Qt | Qt 的重要文件简介(推荐)

一、项目文件(pro 文件)及其语法 1、项目文件(pro 文件)的作用是列举项目中的源文件, 2、pro 文件的语法形式为:“变量 操作符 值”,比如 QT += widgets,多个值之间使用空格分开。 3、pro 文件的注释:从“#”开始,直至本行结束。 4、pro 文件的操作符见下表 5、pro 文…

前台往后台传值,null到后台变成了undefined ,NaN到了后台变成了null

在前端(如JavaScript)和后台(如Node.js、PHP、Java等)之间的数据传输过程中,有时会遇到数据类型不一致或数据值丢失的情况。null变成undefined以及将NaN变成null可能是由以下几个原因造成的: 1. 数据序列化…

Ansible批量操作(上传文件、删除文件指定文件内容、执行sh文件等)

官方网站 https://www.ansible.com/ 一、Ansible 简介 1、Ansible是新出现的自动化运维工具,完全基于Python开发,集合了众多运维工具(puppet、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行…

Backend - ORM 的原生SQL

目录 一、基本认识 (一)意义 (二)原生SQL和SQL (三)原生SQL的执行方式 1. 直接执行自定义SQL 2. 其他方式 二、SQL 写法 (一)原生SQL 中的表,最好用双引号包裹 …

面试算法-133-区间子数组个数

题目 给你一个整数数组 nums 和两个整数:left 及 right 。找出 nums 中连续、非空且其中最大元素在范围 [left, right] 内的子数组,并返回满足条件的子数组的个数。 生成的测试用例保证结果符合 32-bit 整数范围。 示例 1: 输入&#xff…