【JAVA】《接口,抽象方法,抽象类 》之二 、抽象方法详解

抽象方法 详解

    • 一、接口
    • 二、抽象方法
      • 2.1、抽象方法概念
      • 2.2、抽象方法的特点:
      • 2.3、抽象方法的作用:
      • 2.4、抽象方法的应用:
      • 2.5、抽象方法的实践:
      • 2.6、使用抽象方法的注意事项
    • 三、抽象类
    • 四、开发实践

一、接口

1.1、接口的概念
1.2、接口的作用:
1.3、接口应用:
1.4、接口实践:
详情参考【java】《接口,抽象方法,抽象类 》之一 、接口详解

二、抽象方法

2.1、抽象方法概念

接口中的方法通常都是抽象方法,但自从 Java 8 开始,接口也可以包含默认方法(Default Method)和静态方法(Static Method)。抽象方法是一种没有具体实现的方法,它只有方法签名而没有方法体,需要由实现类提供具体的实现。

2.2、抽象方法的特点:

  • 没有方法体:抽象方法只有方法声明,没有方法体。
  • 必须由子类实现:抽象方法必须由子类提供具体的实现,否则子类也必须声明为抽象类。
  • 用于定义行为规范:抽象方法通常用于定义一种行为规范,告诉子类应该具备的行为。

2.3、抽象方法的作用:

  • 定义接口规范:抽象方法定义了接口或抽象类应该具备的行为,提供了一种规范约束。
  • 实现多态:通过抽象方法,不同的子类可以提供自己特定的实现,从而实现多态。

2.4、抽象方法的应用:

  • 接口定义:接口中的方法通常都是抽象方法,用于定义接口规范。
  • 抽象类:抽象类中的方法可以是抽象方法,用于提供一种行为规范,而具体的实现交由子类实现。
  • 继承:子类继承抽象类或实现接口时,必须提供抽象方法的具体实现。

2.5、抽象方法的实践:

考虑以下的示例,定义了一个 Shape 接口,其中包含一个抽象方法 calculateArea(),用于计算图形的面积。具体的图形类(如圆、矩形)必须实现该方法来提供自己的面积计算逻辑:

// 定义接口
interface Shape {double calculateArea(); // 计算形状的面积
}// 实现接口
class Circle implements Shape {private double radius;public Circle(double radius) {this.radius = radius;}@Overridepublic double calculateArea() {return Math.PI * radius * radius;}
}class Rectangle implements Shape {private double width;private double height;public Rectangle(double width, double height) {this.width = width;this.height = height;}@Overridepublic double calculateArea() {return width * height;}
}// 使用接口
public class Main {public static void main(String[] args) {Shape circle = new Circle(5);System.out.println("Circle area: " + circle.calculateArea());Shape rectangle = new Rectangle(4, 6);System.out.println("Rectangle area: " + rectangle.calculateArea());}
}

在这里插入图片描述

在上述示例中,Shape 接口定义了 calculateArea() 抽象方法,CircleRectangle 类分别实现了该方法,提供了自己的面积计算逻辑。这样,无论是圆还是矩形,都可以通过统一的方法来计算它们的面积。

2.6、使用抽象方法的注意事项

在使用抽象方法时,有几个注意事项需要考虑:

  • 抽象方法没有方法体 \color{green}{抽象方法没有方法体} 抽象方法没有方法体:抽象方法只有方法声明而没有方法体,因此在子类中必须提供具体的实现。
  • 子类必须实现抽象方法 \color{green}{子类必须实现抽象方法} 子类必须实现抽象方法:如果一个类继承了抽象类或实现了接口,并且其中包含抽象方法,那么子类必须实现这些抽象方法,除非子类自己也声明为抽象类
  • 抽象方法不能是私有的或静态的 \color{green}{抽象方法不能是私有的或静态的} 抽象方法不能是私有的或静态的:抽象方法不能是私有的(private)或静态的(static),因为它们必须被子类重写。
  • 抽象方法不能被 f i n a l 修饰 \color{green}{抽象方法不能被final修饰} 抽象方法不能被final修饰:抽象方法不能被 final 修饰,因为 final 修饰的方法不能被子类重写。
  • 抽象方法可以被覆盖为非抽象方法 \color{green}{抽象方法可以被覆盖为非抽象方法} 抽象方法可以被覆盖为非抽象方法:一个抽象类中的抽象方法可以被它的子类实现为非抽象方法。这使得抽象类可以逐步完善,逐步提供默认实现。
  • 抽象方法不能被覆盖为私有方法 \color{green}{抽象方法不能被覆盖为私有方法} 抽象方法不能被覆盖为私有方法:在 Java 9 之前,抽象方法不能被覆盖为私有方法,但可以被覆盖为默认方法或静态方法。
  • 抽象方法的可见性 \color{green}{抽象方法的可见性} 抽象方法的可见性:抽象方法的可见性必须比其所在类的可见性更低,例如,如果一个类是 public 的,那么其抽象方法必须至少是 public 的,而不能是 protected 或 private 的。
  • 接口默认方法 \color{green}{接口默认方法} 接口默认方法:Java 8 引入了接口默认方法(Default Method),它们为接口提供了具体的方法实现。实现类可以选择是否覆盖默认方法。
  • 静态方法不是抽象方法 \color{green}{静态方法不是抽象方法} 静态方法不是抽象方法:静态方法在接口中不是抽象方法,它们可以有方法体,并且不需要在实现类中被覆盖。

在编写代码时,应该根据具体的需求和设计原则来合理使用抽象方法,确保代码的清晰、可读和易于维护。

三、抽象类

如果一个类继承了抽象类或实现了接口,并且其中包含抽象方法,**那么子类必须实现这些抽象方法,除非子类自己也声明为抽象类。**下面介绍一下抽象类。
3.1、抽象类的概念
3.2、抽象类的特点:
3.3、抽象类的作用:
3.4、抽象类的应用:
3.5、抽象类的注意事项:
详情参考【JAVA】《接口,抽象方法,抽象类 》之三 、抽象类详解

四、开发实践

4.1、定义接口:
4.2、实现抽象类:
4.3、创建具体实现类:
4.4、使用示例:
4.5、调用流程:
详情参考【JAVA】《接口,抽象方法,抽象类 》之四 、开发实践

订阅我的专栏,动动小手,点点关注,随学随更~

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

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

相关文章

如何利用Idea创建一个Servlet项目(新手向)

💕"Echo"💕 作者:Mylvzi 文章主要内容:如何利用Idea创建一个Servlet项目(新手向) Servlet是tomcat的api,利用Servlet进行webapp开发很方便,本文将介绍如何通过Idea创建一个Servlet项目(一共分为七步,这可能是我们写过的…

简介高效的 CV 入门指南: 100 行实现 ConvNext 图像分类

简介高效的 CV 入门指南: 100 行实现 ConvNext 图像分类 概述ConvNext架构创新参数效率计算效率100 行代码实现 ConvNext 图像分类ConvNext tinyConvNext Base 概述 在当今快速发展的人工智能领域, 计算机视觉 (Computer Vision, CV) 已称为一个关键的研究和应用领域. CV 可以…

学习鸿蒙基础(4)

1.条件渲染 ArkTS提供了渲染控制的能力。条件渲染可根据应用的不同状态,使用if、else和else if渲染对应状态下的UI内容。 当if、else if后跟随的状态判断中使用的状态变量值变化时,条件渲染语句会进行更新。。 Entry Component struct PageIfElse {Stat…

统信操作系统下数据库管理利器

PL/SQL是一款荷兰公司开发的数据库管理软件,尽管只支持Oracle一种数据库,但是在这一种数据库的支持上深度耕耘了30年,做到了Oracle管理的极致,从而拥有量海量的用户。 当然,随着时间的推移,PL/SQL也出现了一…

鸿蒙-基于ArkTS声明式开发的简易备忘录,适合新人学习,可用于大作业

本文地址:https://blog.csdn.net/qq_40785165/article/details/136161182?spm1001.2014.3001.5502,转载请附上此链接 大家好,我是小黑,一个还没秃头的程序员~~~ 不知不觉已经有很长一段时间没有分享过自己写的东西了&#xff0…

QPainter绘图与QPen、QFont及QBrush详细用法

一.基本绘图属性: 1.基本绘图类: Qt的绘图功能基于QPainter、QPainterDevice和QPainterEngine三个类。QPainter类在窗口和其他绘制设备上执行低级绘制。它提供高度优化的功能来完成大多数图形用户界面程序所需的工作,包括绘制基本的点、线、…

阿里云 OSS

阿里云对象存储服务(Object Storage Service,简称 OSS) OSS 为 Object Storage Service,即对象存储服务。是阿里云提供的海量、安全、低成本、高可靠的云存储服务。 OSS 具有与平台无关的 RESTful API 接口,可以在任…

深度学习(16)--基于经典网络架构resnet训练图像分类模型

目录 一.项目介绍 二.项目流程详解 2.1.引入所需的工具包 2.2.数据读取和预处理 2.3.加载resnet152模型 2.4.初始化模型 2.5.设置需要更新的参数 2.6.训练模块设置 2.7.再次训练所有层 2.8.测试网络效果 三.完整代码 一.项目介绍 使用PyTorch工具包调用经典网络架构…

vue3项目配置按需自动导入API组件unplugin-auto-import

场景应用:避免写一大堆的import,比如关于Vue和Vue Router的 1、安装unplugin-auto-import npm i -D unplugin-auto-import 2、配置vite.config import AutoImport from unplugin-auto-import/vite//按需自动加载API插件 AutoImport({ imports: ["…

项目发布前如何打tag标签及标签命名规范

项目发布前如何打tag标签及标签命名规范 1.问题背景 我们知道git分支可以理解为一系列提交流水组成的线,如果我们开发的项目到了一个比较重要的阶段,比如项目发布上线,处于方便后期代码的追溯和维护的考虑,如何在繁杂的日志提交…

一般小红书种草达人多少钱,投放注意事项

在互联网时代,小红书成为了广大消费者了解、评价和分享美妆、服饰、生活方式等方面的平台之一。平台上诸多用户的种草帖,已经成为了很多人发现新品、了解产品真实情况的重要渠道。同时众多品牌也纷纷加入了进来,今天我们和大家来分享下一般小…

力扣面试150 验证回文串 双指针 Character API

Problem: 125. 验证回文串 文章目录 思路复杂度Code 思路 👨‍🏫 参考题解 Character.isLetterorDigit(char c):判读字符 c 是否是字母或者数字 Character.toLowerCase(char c):将字符 c 转换为小写字母 复杂度 时间复杂度: …