当前位置: 首页 > news >正文

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

一、抽象类和接口的区别

特点 抽象类 接口
关系 “是一个”的关系(圆形是几何形状的一种) “能做什么”的关系(微波炉能够加热)
方法 可以有抽象方法和具体方法 主要是抽象方法,可以有默认方法(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.jsqmd.com/news/49842/

相关文章:

  • TiDB为什么它正成为取代MySQL的新宠?
  • [数据存储/数据库/分布式系统] 一致性哈希算法
  • 我所沉浸的情绪场景
  • [TSDB] OpenGemini 版本特性发展沿革
  • 2025电源模块厂家推荐:从技术实力到售后,这份榜单收好
  • CF1490D-Permutation Transformation
  • 文本文件与基于二进制文件的存储的学生管理系统
  • Linux 中grep命令在文本中匹配单个的字母
  • Docker Compose 安装问题排查全记录(WSL2 Ubuntu 22.04 环境)
  • 一些 DS
  • newDay22
  • B4324 双向链表
  • 系列最便宜!苹果iPhone 17e要来了:60Hz低刷灵动岛屏幕
  • Codeforces Round 1065 (Div. 3)
  • 代码随想录算法训练营第四天:链表part02
  • CF2027A-Rectangle Arrangement
  • 线段树全家桶
  • 用 Node.js 实现英文数字验证码识别
  • 用 Rust 和 Tesseract OCR 实现英文数字验证码识别
  • 在Java中调用第三方接口并返回第三方页面
  • 251124省运会结束啦
  • 用 C# 和 Tesseract 实现英文数字验证码识别
  • 有了TCP为什么还需要HTTP?再用RPC?这次彻底讲明白了
  • 11.24午夜盘思
  • Java调用第三方接口的方法
  • 2025留学代写危机应对指南:5家靠谱机构助你重返校园
  • 2025美国大学停学应对全攻略:5大靠谱机构助你重返学术轨道
  • 2025美国紧急转学机构推荐深度解析:靠谱机构认准这些核心优势,危机中重启留学之路​
  • 第35天(中等题 数据结构)
  • 2025美国留学求职机构实力解析:你的职场Offer引路人在哪?