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

【从0开始学习Java | 第8篇】抽象类和接口

在这里插入图片描述

文章目录

  • 🥝抽象类
    • 概念
    • 如何定义一个抽象类
    • 抽象方法定义语法📖
  • 抽象类总结规定🧾
  • 🥝接口
    • 接口定义
    • 实现接口语法
    • 接口特性🍂
    • 接口与类的区别⚠️
    • 抽象类和接口的区别⚠️

🥝抽象类

概念

在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类,即该抽象类反应了该类的大致信息,但不够充分,还需要继续补充。

注意抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样

在 Java 中抽象类表示的是一种继承关系一个类只能继承一个抽象类,而一个类却可以实现多个接口

如何定义一个抽象类

public abstract class 类名{
//定义一个抽象类
}

抽象方法定义语法📖

如果你想设计这样一个类,该类包含一个特别的成员方法,该方法的具体实现由它的子类确定,那么你可以在父类中声明该方法为抽象方法。

Abstract 关键字同样可以用来声明抽象方法,抽象方法只包含一个方法名,而没有方法体

访问修饰符 abstract 返回值类型 方法名(参数列表);
//知道要做一件事情,但不知道具体怎么去做这件事情

代码示例:

public abstract class Animal {//抽象方法是没有方法体的。因为方法体就是表示知道具体怎么去做这件事情。public abstract void eat();
}public class Panda extends Animal {@Overridepublic void eat() {System.out.println("熊猫吃竹叶");}
}public class Tiger extends Animal{@Overridepublic void eat() {System.out.println("老虎吃肉");}
}public class AnimalTest {public static void main(String[] args) {Animal a1 = new Panda();a1.eat();Animal a2 = new Tiger();a2.eat();}
}

声明抽象方法会造成以下两个结果:

  • 如果一个类包含抽象方法,那么该类必须是抽象类
  • 任何子类必须重写父类的抽象方法,或者声明自身为抽象类

继承抽象方法的子类必须重写该方法。否则,该子类也必须声明为抽象类。最终,必须有子类实现该抽象方法,否则,从最初的父类到最终的子类都不能用来实例化对象

抽象类总结规定🧾

  1. 抽象类不能被实例化(初学者很容易犯的错),如果被实例化,就会报错,编译无法通过。只有抽象类的非抽象子类可以创建对象
  2. 抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类
  3. 抽象类中的抽象方法只是声明,不包含方法体,就是不给出方法的具体实现,也就是方法的具体功能
  4. 构造方法,类方法(用 static 修饰的方法)不能被声明为抽象方法
  5. 抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类

🥝接口

接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过实现接口的方式,从而来继承接口的抽象方法。

接口并不是类,类描述对象的属性和方法。接口则包含类要实现的方法

接口定义

[public] interface 接口名 {
[public static final]数据类型 变量名 = 变量的值; //接口中定义变量,该变量是静态常量,在定义的时候必须赋值返回值类型 方法名([参数列表]);//定义接口方法default 返回值类型 方法名([参数列表]) {//接口中定义的默认方法,必须在JDK8及以上版本使用[ return 返回值;]}static 返回值类型 方法名([参数列表]) {//接口中定义的静态方法,必须在JDK8及以上版本使用[ return 返回值;]}private 返回值类型 方法名([参数列表]) {//接口中定义的私有方法,必须在JDK9及以上版本使用[ return 返回值;]}
}

实现接口语法

访问修饰符 class 类名 implements 接口名1, 接口名2,...接口名n{
}

例子:

public interface USB {void service(); //USB接口服务
}public class KeyBoard implements USB {@Overridepublic void service() {System.out.println("键盘已接入,可以开始打字了");}
}

接口特性🍂

  • 接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)
  • 接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)
  • 接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法

接口与类的区别⚠️

  • 接口不能用于实例化对象
  • 接口没有构造方法
  • 接口中所有的方法都必须是抽象方法,Java 8之后接口中可以使用default关键字修饰的非抽象方法
  • 接口不能包含成员变量,除了 static 和 final 变量
  • 接口不是被类继承了,而是被类实现
  • 接口支持多态继承

抽象类和接口的区别⚠️

特性接口(Interface)抽象类(Abstract Class)
继承关系一个类可实现多个接口(多实现)一个类只能继承一个抽象类(单继承)
成员变量只能是public static final常量可包含任意修饰符的成员变量
方法实现抽象方法无实现;默认方法和静态方法有实现可包含普通方法(有实现)和抽象方法(无实现)
构造方法无构造方法有构造方法(供子类调用)
设计意图定义 “能做什么”(行为规范),体现 “like-a” 关系定义 “是什么”(类的本质),体现 “is-a” 关系
单/多继承支持多继承只能单继承

一句话总结:接口侧重 “功能扩展”,抽象类侧重 “继承体系”


如果我的内容对你有帮助,请 点赞 评论 收藏 。创作不易,大家的支持就是我坚持下去的动力!
在这里插入图片描述

http://www.dtcms.com/a/307073.html

相关文章:

  • 力扣热题100---------35.搜索插入为位置
  • NLU 语义解析评测实践:基于函数调用的 ACC、ROUGE 与 BLEU 综合指标
  • LangGraph底层API学习
  • 论文阅读|CVPR 2025|Mamba进一步研究|GroupMamba
  • RNN、LSTM、Transformer推荐博文
  • AI在软件测试中的应用:自动化测试框架、智能缺陷检测与A/B测试优化
  • 人工智能如何改变项目管理:应用、影响与趋势
  • 无监督MVSNet系列网络概述
  • 并查集算法:Python实现与工程实践指南
  • 如何协调跨部门资源?核心要点分析
  • Java String类练习
  • 客户满意度调查:助力商场提升运营效能​(客户满意度调查)
  • 8.Linux : 日志的管理与时钟同步的配置
  • 代码随想录算法训练营第五十六天|动态规划part6
  • 手动 对列表字段进行排序
  • 【高等数学】第七章 微分方程——第四节 一阶线性微分方程
  • LNN+XGBoost:优化多层供应链订购:缓解牛鞭效应
  • C++STL系列之bitset
  • Git——分布式版本控制系统
  • #C语言——学习攻略:深挖指针路线(四)--字符指针变量,数组指针变量,二维数组传参的本质,函数指针变量,函数指针数组
  • ConvertX:自托管的在线文件转换器,支持1000+种格式!
  • Linux系统编程Day1-- 免费云服务器获取以及登录操作
  • CH347使用笔记:CH347作为FPGA下载器的几种方式
  • Maven 配置阿里云镜像加速
  • huggingface是什么?2025-07-30
  • Mac 上配置jdk 环境变量
  • 2. Agent与 React流程
  • 【LY88】双系统指南及避坑
  • Python 的 match-case
  • 从映射到共生:元宇宙、物联网与AI的智能融合生态图谱