JavaSE_抽象类(抽象类概念、语法、、特性、作用)

前言

 在上一节中,我们讲解了JAVA中的继承,在本节讲解java中抽象类与接口,这个在程序设计中是非常重要的。

一、什么是抽象类

1.1 抽象类概念

基本概念:

在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

比如:
在这里插入图片描述
说明:

  1. 矩形、三角形、圆形都是图形,因此和Shape类的惯性应该是继承关系
  2. 虽然图形图Shape中也存在draw的方法,但由于Shape类并不是具体的图形,因此其内部的draw方法实际是没有办法实现的
  3. 由于shape类没有办法描述一个具体的图形,导致其draw(方法无法具体实现,因此可以将shape类设计为“抽象类”。

 在打印图形例子中, 我们发现,父类 Shape 中的 draw 方法好像并没有什么实际工作, 主要的绘制图形都是由 Shape的各种子类的 draw 方法来完成的。像这种没有实际工作的方法, 我们可以把它设计成一个抽象方法(abstract method),包含抽象方法的类我们称为 抽象类(abstract class)。

1.2 抽象类语法

在Java中,一个类如果被abstract 修饰称为抽象类,抽象类中被abstract 修饰的方法称为抽象方法,抽象方法不用给出具体的实现体。

// 抽象类:被abstract修饰的类
public abstract class Shape {// 抽象方法:被abstract修饰的方法,没有方法体abstract public void draw();abstract void calcArea();// 抽象类也是类,也可以增加普通方法和属性public double getArea(){return area;}protected double area; // 面积
}

二、 抽象类特性

2.1 抽象类不能直接实例化对象

Shape shape = new Shape();
---------------------------------------------------------------
// 编译出错
Error:(30, 23) java: Shape是抽象的; 无法实例化

2.2 抽象方法不能是 private 的

abstract class Shape {abstract private void draw();
}-----------------------------------------------------------------
// 编译出错
Error:(4, 27) java: 非法的修饰符组合: abstract和private

2.3 抽象方法不能被final和static修饰,因为抽象方法要被子类重写

public abstract class Shape {abstract final void methodA();abstract public static void methodB();
}
-----------------------------------------------------------------
// 编译报错:
// Error:(20, 25) java: 非法的修饰符组合: abstract和final
// Error:(21, 33) java: 非法的修饰符组合: abstract和static

2.4 抽象类必须被继承,并且继承后子类要重写父类中的抽象方法,否则子类也是抽象类,必须要使用abstract 修饰

比如这是我们先前定义的抽象类:

// 抽象类:被abstract修饰的类
public abstract class Shape {// 抽象方法:被abstract修饰的方法,没有方法体abstract public void draw();abstract void calcArea();// 抽象类也是类,也可以增加普通方法和属性public double getArea(){return area;}protected double area; // 面积
}

矩形类、圆形类、三角形形类分别继承抽象类:

// 矩形类
public class Rect extends Shape {private double length;private double width;Rect(double length, double width){this.length = length;this.width = width;}//重写抽象类中的抽象方法public void draw(){System.out.println("矩形: length= "+length+" width= " + width);}//重写抽象类中的抽象方法public void calcArea(){area = length * width;}
}
\\圆形
public class Circle extends Shape{private double r;final private static double PI = 3.14;public Circle(double r){this.r = r;}public void draw(){System.out.println("圆:r = "+r);}public void calcArea(){area = PI * r * r;}
}
// 三角形类:
public abstract class Triangle extends Shape {private double a;private double b;private double c;@Overridepublic void draw() {System.out.println("三角形:a = "+a + " b = "+b+" c = "+c);}-------------------------------------------------// 三角形:直角三角形、等腰三角形等,还可以继续细化//@Override//double calcArea(); // 编译失败:要么实现该抽象方法,要么将三角形设计为抽象类
}

三、 抽象类作用

抽象类本身不能被实例化, 要想使用, 只能创建该抽象类的子类. 然后让子类重写抽象类中的抽象方法。那么普通的类也可以被继承呀, 普通的方法也可以被重写呀, 为啥非得用抽象类和抽象方法呢?

抽象类的作用:
 使用抽象类的场景就如上面的代码, 实际工作不应该由父类完成, 而应由子类完成。 那么此时如果不小心误用成父类了, 使用普通类编译器是不会报错的. 但是父类是抽象类就会在实例化的时候提示错误,让我们尽早发现问题。

总结

 好啦!本节我们介绍了什么是抽象类?抽象类的语法是什么?抽象类的特性、以及抽象类的作用。
 在本专栏(https://blog.csdn.net/2301_80653026/category_12637672.html)的下一节中我们为将重点介绍接口,以及抽象类和接口的区别。

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

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

相关文章

动态规划——背包问题(01,完全,多重)

一、01背包问题 1.题目描述 有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。 求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。 01背包问题特点&…

客户管理软件排行榜:对比18款CRM

本文将对比18个客户管理软件:纷享销客、Zoho CRM、Salesforce、HubSpot CRM、Pipedrive、Freshsales、Microsoft Dynamics 365 CRM、Insightly CRM、Nimble CRM、Apptivo CRM、SugarCRM、白码CRM、简信CRM、销帮帮CRM、Teamface企典CRM、神州云动CRM、悟空CRM、八百…

由于找不到msvcp120.dll,无法继续执行代码的5种解决方法

在操作计算机的过程中,您或许会遇到这样一种情形:当试图启动某个软件应用程序时,系统突然弹出一个错误提示框,明确指出“找不到msvcp120.dll”,它会导致程序无法正常启动或运行。为了解决这个问题,我总结了…

OpenNJet:云原生技术中的创新者与实践者

目录 引言OpenNJet介绍OpenNJet优势1. 性能无损动态配置2. 灵活的CoPilot框架3. 支持HTTP/34. 支持国密5. 企业级应用6. 高效安全 OpenNJet 编译与安装环境准备编译环境配置配置yum源yum 安装软件包创建符号连接修改 ld.so.conf 配置 编译代码 部署 WEB SERVER配置OpenNJet部署…

HCIP-Datacom-ARST必选题库_BGP【道题】

1.关于summary automatic命令和BGP聚合的描述,错误的是? 该命令用于实现自动聚合,其优先级高于手动聚合 配置该命令后,BGP将按自然网段聚合路由 该命令用来使能对本地引入的路由进行自动聚合 配置该命令后,BGP只向对等体发送聚合后的路由 1.关于summary automatic命令和BGP聚…

Vue入门到关门之Vue3项目创建

一、vue3介绍 1、为什么要学习vue3? vue3的变化: 首先vue3完全兼容vue2,但是vue3不建议用vue2的写法;其次,vue3拥抱TypeScript,之前vue2使用的JavaScript,ts完全兼容js 最后之前学的vue2 是…

(数据分析方法)长期趋势分析

目录 一、定义 二、目的 三、方法 1、移动平均法 (1)、简单移动平均法 (2)、加权移动平均法 (3)、指数平滑法 2、最小二乘法 3、线性回归 1、数据预处理 2、观察数据分布建立假设模型 3、定义损失函数 4、批量梯度下降 5、优化 4、LSTM 时序分析 5、特征工程 一…

OCC笔记:图形可视化的实现方式

注:文中参看的occ的源码版本为7.4.0 1、实现思路概览 整体架构 主要有3大块:AIS(Application Interactive Services ,直译为:应用程序交互服务)、Graphics(图形)、Geometry & T…

Spring Security + JWT 实现登录认证和权限控制

Spring Security JWT 实现登录认证和权限控制 准备步骤 准备好一些常用的工具类,比如jwtUtil,redisUtil等。引入数据库,mybatis等,配置好controller,service,mapper,保证能够正常的数据请求。…

书籍推荐|经典书籍ic书籍REUSE METHODOLOGY MANUALFOR等和verilog网站推荐(附下载)

大家好,今天是51过后的第一个工作日,想必大家都还没有完全从节假日的吃喝玩乐模式转变为勤勤恳恳的打工人模式,当然也包括我,因此这次更新主要是分享几篇书籍和verilog相关的学习网站~ 首先是一本数字电路相关的基础书籍&#xf…

如何让你的排单更快?

一般我们都喜欢做打板借用快速通道!但是目前快速通道也是共享通道,独立单元格基本不开发。 想要排单更快,想要隔夜打板,我们到底应该怎么做呢? 想要排单更快,说白了就是要提高你的交易速度!一&a…

性能超越!新模型Dragoman打造高质量英译乌翻译系统,打败现有SOTA模型

DeepVisionary 每日深度学习前沿科技推送&顶会论文分享,与你一起了解前沿深度学习信息! 引言:探索乌克兰语的机器翻译挑战 在当今全球化迅速发展的背景下,机器翻译技术已成为沟通世界各地文化和语言的重要桥梁。尽管如此&…

PMO全面指南:一文读懂PMO的功能、职责、类型、构建

多年来,PMO 的概念在多个行业和类型的组织中越来越受欢迎。一开始,只有大型跨国公司才熟悉它,但后来,许多中小型公司开始采用 PMO 来进行高效的项目管理并实现其战略目标。 根据Statista的数据,目前有80%的组织设有至…

OpenHarmony实战开发-管理位置权限

Web组件提供位置权限管理能力。开发者可以通过onGeolocationShow()接口对某个网站进行位置权限管理。Web组件根据接口响应结果,决定是否赋予前端页面权限。获取设备位置,需要开发者配置ohos.permission.LOCATION,ohos.permission.APPROXIMATE…

基于Springboot的家具网站

基于SpringbootVue的家具网站设计与实现 开发语言:Java数据库:MySQL技术:SpringbootMybatis工具:IDEA、Maven、Navicat 系统展示 用户登录 首页 商家 家具信息 家居资讯 后台管理 后台首页 用户管理 商家管理 家具类型管理 家具…

fabric部署调用合约示例

一 打包智能合约 ①进入fabric-samples文件夹下的chaincode/fabcar/go目录下执行 GO111MODULEon go mod vendor下载依赖(文件夹下已经有go.mod,不需要使用go mod init生成该module文件)②进入到test-network文件下使用以下命令将二进制文件…

微信小程序个人中心、我的界面(示例四)

微信小程序个人中心、我的界面,九宫格简单布局(示例四) 微信小程序个人中心、我的界面,超简洁的九宫格界面布局,代码粘贴即用。更多微信小程序界面示例,请进入我的主页哦! 1、js代码 Page({…

泛微E9开发 限制整型、日期型、附件型字段的取值范围

1、功能背景 在用户进行输入时,通过控制输入数据的范围来实现实际效果,如上级管理者对下级员工进行年度评分时,只能输入1~100分,现在表单中新增三种类型不同的字段,具体如下所示: 2、展示效果 限制整数的…

StreamingT2V

下面首先是参考的一些博客 https://blog.csdn.net/qq_44681809/article/details/137081515 qustion SDEdit:就是给图片加一点噪声然后再用模型去噪,来获得一个更好的帧,比如去掉伪影和污点 这里的分割为m个24帧的块,块与块之间已经有8帧重叠…

JavaScript注释规范

你好,我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃 ,大专生,一枚程序媛,感谢关注。回复 “前端基础题”,可免费获得前端基础 100 题汇总,回复 “前端基础路线”,可获…