【Java学习】【Java基础】--第2篇:抽象类和接口

news/2025/11/25 0:42:18/文章来源:https://www.cnblogs.com/yaoee/p/19266269

一、抽象类和接口的区别

特点 抽象类 接口
关系 “是一个”的关系(圆形是几何形状的一种) “能做什么”的关系(微波炉能够加热)
方法 可以有抽象方法和具体方法 主要是抽象方法,可以有默认方法(default)
变量 可以有普通成员变量 变量默认是public static final(常量)
继承 单继承 多实现
构造器
设计理念 代码复用,模板方法模式 定义行为,多态

1.抽象类


abstract class Shape {private String name;public Shape(String name) {this.name = name;}// 抽象方法,每种形状计算面积的方式不同public abstract double calculateArea();// 具体方法,所有形状共享行为public void displayInfo() {System.out.println("这是一个" + name);System.out.println("面积是: " + calculateArea());}
}class Circle extends Shape {private double radius;public Circle(double radius) {super("圆形");this.radius = radius;}@Overridepublic double calculateArea() {return Math.PI * radius * radius;}
}class Rectangle extends Shape {private double length;private double width;public Rectangle(double length, double width) {super("矩形");this.length = length;this.width = width;}@Overridepublic double calculateArea() {return length * width;}
}public class Main {public static void main(String[] args) {Circle circle = new Circle(3);Rectangle rectangle = new Rectangle(1, 2);// 多态Shape[] shapes = {circle, rectangle};for (Shape s: shapes) {s.displayInfo();}}
}

2.接口


// 定义加热功能
interface Heatable {void heat(); // 默认就是public abstract
}// 定义定时功能
interface Timable {void setTimer(int minuters);// 默认方法default void displayTime() {System.out.println("当前时间已显示");}
}class Microwave implements Heatable, Timable {@Overridepublic void heat() {System.out.println("微波炉正在加热");}@Overridepublic void setTimer(int minuters) {System.out.println("微波炉设置定时" + minuters + "分钟");displayTime();}
}class Kettle implements Heatable {@Overridepublic void heat() {System.out.println("水壶正在加热");}
}public class Main {public static void main(String[] args) {Microwave microwave = new Microwave();Kettle kettle = new Kettle();Heatable[] heatables = {microwave, kettle};for (Heatable h: heatables) {h.heat();}// Timable[] timables = {microwave, kettle}; 编译报错,kettle没有实现Timable,其对象无法指向Timable的引用}
}

二、访问权限

类型 方法种类 允许的访问修饰符 说明
抽象类 抽象方法 public,protected,默认 不能是private,因为抽象方法要重写
抽象类 普通方法 所有权限 包括private
接口 抽象方法 只能是public 默认就是public abstract
接口 默认方法 只能是public Java 8+
接口 静态方法 只能是public Java 8+
接口 私有方法 只能是private Java 9+

三、总结

  • 抽象类:半成品要继承,填空白才能用。像普通类一样自由,但是抽象方法不能使用private
  • 接口:说明书定规矩,多功能随便用。以前只能公开public,Java9以后可以有私有方法private

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

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

相关文章

TiDB为什么它正成为取代MySQL的新宠?

在数据库技术日新月异的今天,TiDB作为一款开源的分布式SQL数据库,正引起越来越多企业的关注。当MySQL 5.7在2023年10月达到其生命周期的终点时,许多组织都在寻找下一代数据库解决方案,TiDB便是其中的佼佼者。在数字…

[数据存储/数据库/分布式系统] 一致性哈希算法

1 概述:一致性哈希算法一致性哈希(Consistent Hashing)是一种特殊的哈希算法,其主要用于在分布式系统中实现【数据的负载均衡】和【高可用性】。它解决了【传统哈希方法】在节点增减时导致【大量数据迁移】的问题。…

[TSDB] OpenGemini 版本特性发展沿革

1 概述: OpenGemini 发展历程暨版本特性OpenGemini 是由华为云发起并开源的一款高性能、高可用、云原生的分布式时序数据库(Time Series Database, TSDB)。其目标是为物联网(IoT)、运维监控、金融等领域提供高效的…

2025电源模块厂家推荐:从技术实力到售后,这份榜单收好

2025电源模块厂家推荐:从技术实力到售后,这份榜单收好!一、电源模块厂家选择核心指南选择电源模块厂家需围绕技术适配性、质量稳定性、服务响应力三大核心维度综合评估:技术匹配度:优先考察产品功率覆盖范围、冷却方…

CF1490D-Permutation Transformation

CF1490D-Permutation Transformation 题目大意 给你一个长度为 \(n\) 的排列 \(p\) 。最大值为深度为 \(0\) 的点。左边为左子树,右边为右子树。子树中最大值的点则为深度为 \(1\) 的点。以此类推,直到子树为空。 询…

文本文件与基于二进制文件的存储的学生管理系统

文本文件与基于二进制文件的存储的学生管理系统目录文本文件与基于二进制文件的存储的学生管理系统一、项目介绍二、包结构三、核心代码介绍3.1 代码展示3.2 代码分析3.3 对比分析四、结果展示五、过程回顾5.1 问题一:…

Linux 中grep命令在文本中匹配单个的字母

001、 grep命令匹配单个的字母[root@pc1 test]# ls a.txt [root@pc1 test]# cat a.txt ## 测试数据 >chr1 xxx CATCTCCCTTAGTGTTGTCCTGAATTGCTNCTACCAGTCTGCTCTGTGTCTTTCAGGGGGACNNNNNNNNNNNNNNNNNNN NNNNNNN…

Docker Compose 安装问题排查全记录(WSL2 Ubuntu 22.04 环境)

Docker Compose 安装问题排查全记录(WSL2 Ubuntu 22.04 环境)Docker Compose 安装问题排查全记录(WSL2 Ubuntu 22.04 环境) 一、核心问题 在 WSL2 下的 Ubuntu 22.04 系统中,始终无法通过 docker compose 命令调用…

一些 DS

如题。 登山计划给定两个长为 \(n\) 的序列 \(a,b\),\(Q\) 次询问,给定 \(L,R,k\),求: \[\min_{L \leq l \leq r \leq R \wedge r-l+1=k} |\min_{i=l}^{r} a_i- \min_{i=l}^{r} b_i| \]\(n \leq 2\times 10^5,Q \…

newDay22

1.今天弄uml建模软件给我整麻爪了,下载的时候老是报错,建模的时候还对不上教学,探索了半天,剩下的时间就是上课和背单词了 2.明天练练Javaweb什么的 3.Javaweb使用还是太不熟练了,必须得多练练了

B4324 双向链表

点击查看代码 #include<bits/stdc++.h>using namespace std;const int N=500005; int l[N],r[N]; int n,m; bool del[N];void insert(int x,int y) {r[x]=r[y],l[x]=y;l[r[y]]=x,r[y]=x; }void remove(int x) {r…

系列最便宜!苹果iPhone 17e要来了:60Hz低刷灵动岛屏幕

系列最便宜!苹果iPhone 17e要来了:60Hz低刷灵动岛屏幕Posted on 2025-11-24 23:55 lzhdim 阅读(0) 评论(0) 收藏 举报据9to5mac报道,苹果将在2026年第一季度推出多款廉价产品,其中包括搭载A18 Pro的MacBook、…

Codeforces Round 1065 (Div. 3)

A. Shizuku Hoshikawa and Farm Legsvoid solve(){int n;cin >> n;if(n % 2){cout << 0 << endl;return ;}int cnt = 0;for(int i = 0; i <= n / 2; ++i){if((n - 2 * i) % 4 == 0) cnt++;}cout …

代码随想录算法训练营第四天:链表part02

代码随想录算法训练营第四天:链表part0224. 两两交换链表中的节点 leetcode链接:https://leetcode.cn/problems/swap-nodes-in-pairs/description/ 题目描述:给你一个链表,两两交换其中相邻的节点,并返回交换后链表…

CF2027A-Rectangle Arrangement

CF2027A-Rectangle Arrangement 题目大意 一个无限大的平面上,给你 \(n\) 个矩形,你可以在平面上任意放置矩形,要求最小矩形覆盖周长。 题解 考虑贪心做法,将所有矩形左下角都放在 \((0,0)\) 上。记录最长的 \(x\)…

线段树全家桶

非常好线段树。加 ※ 的是开始不会,讲了之后才会的题。 CSES 1648- Dynamic Range Sum Queries给定一个包含 \(n\) 个整数的数组,需要处理 \(q\) 次查询 查询有两种类型:1 k u:将位置 \(k\) 的值更新为 \(u\) 2 a …

用 Node.js 实现英文数字验证码识别

验证码识别在自动化测试、信息提取等领域具有实际价值。本文介绍如何通过 Node.js 和 Tesseract.js 库实现一个简单的英文数字验证码识别程序。 一、技术选型与准备 所需工具 Node.js(建议版本 ≥ 14) Tesseract.js(…

用 Rust 和 Tesseract OCR 实现英文数字验证码识别

验证码识别作为图像处理和字符识别的典型应用,常见于自动化测试、数据采集等场景。本文将介绍如何使用 Rust 编写一个简单的 CLI 工具,结合 Tesseract OCR 引擎识别英文数字验证码。 一、环境准备安装 Rust访问 http…

在Java中调用第三方接口并返回第三方页面

在Java中调用第三方接口并返回第三方页面通常涉及到以下几个步骤:‌发送HTTP请求‌:可以使用多种库来发送HTTP请求,如HttpURLConnection、HttpClient(Apache HttpClient 或 Java 11中的HttpClient)等。‌处理响应…