面向对象编程:深入理解抽象类和关键字

文章目录

      • 1. 关键字
        • 1.1 static
        • 1.2 final
        • 1.3 static final
      • 2. 抽象类
        • 2.1 抽象类的推导过程
        • 2.2 抽象类能否创建对象?
        • 2.3 抽象类的意义
        • 2.4 判断
      • 3. 案例:计算圆形和长方形的周长及面积

在这里插入图片描述

在Java编程中,我们经常会遇到一些特殊的关键字和概念,其中包括static、final以及抽象类等。本文将深入探讨这些关键字和概念的作用和使用方法,并通过一个实例展示抽象类的应用。
在这里插入图片描述

1. 关键字

1.1 static

  • static修饰成员变量:表示该成员变量属于类,不属于对象,所有对象共享一份。
  • static修饰成员方法:表示该方法属于类,不属于对象,通过类名直接调用。
  • 什么时候使用static:当所有对象共享一个属性或方法时,可以使用static修饰。

1.2 final

  • final修饰类:表示该类不能被继承。
  • final修饰方法:表示该方法不能被子类重写。
  • final修饰成员变量:表示该成员变量在初始化后不能再修改。
  • final修饰局部变量:表示该局部变量在初始化后不能再修改,使用前必须进行初始化。

1.3 static final

  • 修饰成员变量:表示该成员变量是一个常量,其值在初始化后不能再修改。

在这里插入图片描述

2. 抽象类

2.1 抽象类的推导过程

  • a.由于方法体没有意义,需要干掉方法体。
  • b.添加abstract关键字在方法上,使方法成为合法的抽象方法,方法体依然不完整。
  • c.当前类也不完整,需要添加abstract关键字在class前,使类变得合法,当前类依然不完整。

2.2 抽象类能否创建对象?

  • 抽象类不能直接创建对象,只能用于被继承。

2.3 抽象类的意义

  • 抽象类需要有子类继承,并且重写父类的抽象方法。
  • 子类继承抽象类,可以是普通类,也可以是抽象类。

2.4 判断

  • 有抽象方法的类一定是抽象类。
  • 抽象类中不一定有抽象方法,可以有普通方法。

3. 案例:计算圆形和长方形的周长及面积

现在,我们通过一个实例来应用抽象类的概念,计算圆形和长方形的周长和面积。

abstract class Shape {
    abstract double perimeter();
    abstract double area();
}

class Circle extends Shape {
    double r;

    Circle(double r) {
        this.r = r;
    }

    @Override
    double perimeter() {
        return 2 * Math.PI * r;
    }

    @Override
    double area() {
        return Math.PI * r * r;
    }
}

class Rectangle extends Shape {
    double a;
    double b;

    Rectangle(double a, double b) {
        this.a = a;
        this.b = b;
    }

    @Override
    double perimeter() {
        return 2 * (a + b);
    }

    @Override
    double area() {
        return a * b;
    }
}

public class AbstractClassExample {
    public static void main(String[] args) {
        Shape circle = new Circle(5);
        Shape rectangle = new Rectangle(3, 4);

        System.out.println("圆形周长:" + circle.perimeter());
        System.out.println("圆形面积:" + circle.area());

        System.out.println("长方形周长:" + rectangle.perimeter());
        System.out.println("长方形面积:" + rectangle.area());
    }
}

通过上述实例,我们可以看到抽象类的实际应用。Shape类作为抽象类,包含了计算周长和面积的抽象方法,而Circle和Rectangle类分别继承了Shape类,并重写了父类的抽象方法。通过多态性,我们可以灵活地调用Shape类的子类,并计算出圆形和长方形的周长和面积。

通过本文的介绍,我们深入理解了Java中的抽象类和一些关键字的概念和用法。抽象类作为面向对象编程中的重要概念,可以帮助我们更好地封装和继承,并且通过多态性实现更灵活的代码编写。希望本文对您在学习和应用抽象类方面有所帮助。

有问题或建议的话,欢迎评论区留言交流!!!

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT把python 的import和from讲明白了

文章目录 1、import:import关键字用于导入整个模块,您可以使用该模块中的所有对象。语法如下:2、from ... import ...:from ... import ... 语法用于从模块中导入特定的对象,而不是导入整个模块。您可以通过这种方式选…

14、php面向对象3(final、显示调用父类构造方法、static静态变量与方法)

1、如果父类中的方法被声明为 final&#xff0c;则子类无法覆盖该方法。如果一个类被声明为 final&#xff0c;则不能被继承。 <?php class BaseClass{public function test(){echo "BaseClass::test() called".PHP_EOL;}final public function moreTesting(){e…

基于vue+uniapp微信小程序公司企业后勤服务(设备)系统

本系统分为用户和管理员两个角色&#xff0c;其中用户可以注册登陆系统&#xff0c;查看公司公告&#xff0c;查看设备&#xff0c;设备入库&#xff0c;查看通讯录&#xff0c;会议室预约&#xff0c;申请出入&#xff0c;申请请假等功能。管理员可以对员工信息&#xff0c;会…

Makefile常用函数

目录 字符串替换函数&#xff1a;subst 模式字符串替换函数&#xff1a;patsubst 去空格函数 strip 查找字符串函数 findstring 过滤函数 filter 反过滤函数 filter-out 排序函数 sort 取目录函数 dir 取文件函数 notdir 取后缀函数 suffix 取前缀函数 basename 加…

elementUI this.$confirm 文字大小样式

dangerouslyUseHTMLString:true // message部分 以html片段处理 customClass //MessageBox 的自定义类名 整个comfirm框自定义类名 cancelButtonClass // 取消按钮的自定义类名 confirmButtonClass // 确定按钮的自定义类名<style> .addcomfirm{width: 500px; } .a…

selenium的java方式打开IE浏览器

1.下载软件Selenium Driver 官方下载地址&#xff1a; ​ https://www.selenium.dev/downloads/解压selenium-java-3.141.59.zip文件到java项目 seleniumDemo&#xff0c;并降解压的文件放入依赖中&#xff08;1&#xff09;双击项目的src打开项目结构&#xff0c;或右键-打开…

易班开放应用授权重定向,出现跨域的解决方案

问题描述 今天开发H5网站需要接入易班&#xff0c;经过易班授权然后重定向&#xff08;code: 302&#xff09;&#xff0c;使用axios发请求&#xff0c;但是前后端均配置跨域的情况下&#xff0c;不管怎么弄都是一直跨域 但是我们看network&#xff0c;network中对应请求的res…

外贸行业企业邮箱选择:安全好用的邮箱服务

随着全球化的发展&#xff0c;外贸行业在全球经济中越来越重要。作为一家从事对外贸易的企业&#xff0c;可靠、安全、易用的邮箱系统对于成功的国际交易至关重要。为您的企业选择正确的邮箱解决方案可能是一个挑战。为了使选择过程更加简化&#xff0c;我们在这里提供了一些提…

子类化QThread来实现多线程,moveToThread函数的作用

子类化QThread来实现多线程&#xff0c; QThread只有run函数是在新线程里的&#xff0c;其他所有函数都在QThread生成的线程里。正确启动线程的方法是调用QThread::start()来启动。 一、步骤 子类化 QThread&#xff1b;重写run&#xff0c;将耗时的事件放到此函数执行&#…

【UE5 多人联机教程】03-创建游戏

效果 步骤 打开“UMG_MainMenu”&#xff0c;增加创建房间按钮的点击事件 添加如下节点 其中&#xff0c;“FUNL Fast Create Widget”是插件自带的函数节点&#xff0c;内容如下&#xff1a; “创建会话”节点指游戏成功创建一个会话后&#xff0c;游戏的其他实例即可发现&am…

NineData支持最受欢迎数据库PostgreSQL

根据在 Stack Overflow 发布的 2023 开发者调研报告中显示&#xff0c;PostgreSQL 以 45% vs 41% 的受欢迎比率战胜 MySQL&#xff0c;成为新的最受欢迎的数据库。NineData 也在近期支持了 PostgreSQL&#xff0c;用户可以在 NineData 平台上进行创建数据库/Schema、管理用户与…

gensim conherence model C_V 值与其他指标负相关BUG

在我用gensim3.8.3 conherence model分析京东评论主题模型时&#xff0c; C_V 与npmi、u_mass出现了强烈的皮尔逊负相关&#xff1a; 这些地方也反映了类似问题&#xff1a; https://github.com/dice-group/Palmetto/issues/12 https://github.com/dice-group/Palmetto/issue…

手把手教你写代码——基于控制台的学生信息管理系统(单表)

栏目介绍 本栏目专为入门java学习者设计的一些简单的入门项目&#xff0c;另有视频一步一步从零到完整代码的开发过程&#xff0c;让你从头到尾明白整个系统的实现过程&#xff0c;当你完整看完视频之后&#xff0c;完全可以自己不看教程的情况下写出一套属于你自己的代码&…

X - Transformer

回顾 Transformer 的发展 Transformer 最初是作为机器翻译的序列到序列模型提出的&#xff0c;而后来的研究表明&#xff0c;基于 Transformer 的预训练模型&#xff08;PTM&#xff09; 在各项任务中都有最优的表现。因此&#xff0c;Transformer 已成为 NLP 领域的首选架构&…

k8s部署新版elasticsearch+kibana并配置快照备份

版本:es 7.17.6 kibana 7.17.6 k8s:1.19.16 一、介绍 Elasticsearch和Kibana是一对强大的开源工具&#xff0c;通常一起使用以构建实时数据分析和可视化解决方案。 Elasticsearch: Elasticsearch是一个分布式、高性能的实时搜索和分析引擎。它构建在开源搜索引擎库Lucene之上…

【2023 年第二届钉钉杯大学生大数据挑战赛】 初赛 B:美国纽约公共自行车使用量预测分析 问题三时间序列预测Python代码分析

2023 年第二届钉钉杯大学生大数据挑战赛 初赛 B&#xff1a;美国纽约公共自行车使用量预测分析 问题三时间序列预测Python代码分析 相关链接 【2023 年第二届钉钉杯大学生大数据挑战赛】 初赛 B&#xff1a;美国纽约公共自行车使用量预测分析 问题一Python代码分析 【2023 年…

【数据结构】AVL树/红黑树

目录 1.AVL树&#xff08;高度平衡二叉搜索树&#xff09; 10.1.基本概念 10.2.实现 10.2.1.AVL树节点的定义 10.2.2.AVL树的插入 10.2.3.AVL树的旋转 1.新节点插入较高左子树的左侧---左左&#xff1a;右单旋 2.新节点插入较高右子树的右侧---右右&#xff1a;左单旋 3.新节点…

第三章 HL7 架构和可用工具 - 使用 HL7 架构结构页面

文章目录 第三章 HL7 架构和可用工具 - 使用 HL7 架构结构页面使用 HL7 架构结构页面查看文档类型列表查看消息结构查看段结构 第三章 HL7 架构和可用工具 - 使用 HL7 架构结构页面 使用 HL7 架构结构页面 通过 HL7 架构页面&#xff0c;可以导入和查看 HL7 版本 2 架构规范。…

Tensorflow benchmark 实操指南

环境搭建篇见环境搭建-CentOS7下Nvidia Docker容器基于TensorFlow1.15测试GPU_东方狱兔的博客-CSDN博客 1. 下载Benchmarks源码 从 TensorFlow 的 Github 仓库上下载 TensorFlow Benchmarks&#xff0c;可以通过以下命令来下载 https://github.com/tensorflow/benchmarks 我…

Jenkins 安装构建

一、CentOS 安装 1. 使用该存储库 sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key 2. 安装 Java yum install fontconfig java-11-openjdk配…