抽象类
概念
在面向对象的概念中,所有的对象都是通过 类 来描述的,但并不是所有的类(例1)都用来描述符对象。如果一个类中没有足够的信息来描述一个具体对象,此时这样的类就是抽象类
例1:

我看可以看到,一共有四个 Draw()方法,但却只有三个 Drow()方法被输出。
说明:
1.矩形,三角形,圆形都是图形,因此和 Shape类 的关系应该是继承关系
2.虽然 图形类Shape 中也存在 Draw()方法,但由于 Shape类并不是具体的图形,因此其内部的 Draw()方法实际是没有办法实现的。
3.由于 Shape类没有办法描述具体的图形,导致其 Draw()方法无法具体实现,因此可以将 Shape类 设计为"抽象类"
抽象类语法
语法:

抽象类特征
1. 抽象类是被 abstract 修饰的
2.被 abstract 修饰的方法 被称为 抽象方法。该方法不用背具体实现(例如;输出)
3.当一个类中含有抽象方法时,该类必须使用 abstract 修饰
4.抽象类中,可以有和普通类一样的成员变量和成员方法
5.抽象类不可以被实例化
6.抽象类不能实例化就是为了---被继承
7.当一个普通的类 继承了这个抽象类之后,这个普通类一定要重写这个抽象类当中 所有的抽象方法。
8.final 和 abstract 是不能同时存在的。抽象方法不能被private 和 static 修饰
9当一个普通类B不想继承抽象类A,此时可以把普通类B变成抽象类,当一个普通类C继承B时,C要重写B和A中所有的抽象方法。
10.抽象方法也可以实现向上转型和动态绑定。
当一个方法被 abstract 修饰后,该方法不能含有主体,否则会报错(不能含有{})


匿名对象:new xxx();
匿名对象的缺点:每一次使用,都会重新实例化。
抽象方法虽然不能通过实例化来对成员变量初始化,但可以通过构造方法来初始化

抽象类的作用
为了安全,例如:final是变量变为常量,防止用户修改
接口
接口的概念
接口****就是公共的行为规范标准,在Java中,接口可以看作:多个类的公共规范, 是一种引用数据类型
语法

1.使用 interface 来定义一个接口。接口命名以大写 I 开头。
2.接口中的成员变量 默认时 public static final 的,一般情况下不写。
3.接口中的成员方法 默认时 public abstract 的, 一般情况下不写。
4.接口当中不可以有普通方法。

5.Java8后,允许在接口中定义一个 default 方法,允许抽象方法可以有具体实现(abstract 允许方法没有具体实现)

6.接口当中的方法如果是 static方法,也可以有具体的实现
7.接口不能通过 new关键字 实例化
8.类与接口通过 implements 实现关系。(作用与父子类继承相似)。
9.接口也可以发生向上转型 和 动态绑定
10.当一个类实现接口中的方法时候,当前类中的方法,不能不加 public。
11.接口中不能有构造方法和代码块
12.接口虽然不是类,但是会产生独立的文件,接口编译完后字节码的后缀格式也是 class。
13.如果类没有实现接口中的所有抽象方法,则类 必须设置为抽象类
14.java8中接口包含 defalt方法
我们可以通过一个小项目来体会接口的用法
1.首先我们创建一个包,并创建一个接口,分别含有打开服务和关闭服务

2.然后new一个Mouse类让类与接口实现关系,并且重写开启,与关闭的方法

3.new一个Key类与接口实现关系,重写打开与关闭方法。

4.new一个Computer类,我们通过这个类实现与key类和Mouse类建立联系

实现多个接口
在Java中类与类是单继承关系,一个类只能继承一个父类,但却可以实现多个接口;类A继承B后就不能在继承类C了,但类A可以实现接口 I1,I2,I3........;(目的:为了解决类无法多继承);
一个类既可以继承又可以实现接口,并且继承在前,接口在后

我们分别写了,一个动物抽象类当作父类,一个行为"飞"的接口;行为"跑"的接口;行为"游泳"的接口;
并且在 Java 中不支持多继承, 类只能继承一个父类,但可以有多个接口的性质

点击某个类,按住 Ait + Enter可以重写方法
实现多态

继承表示的是 谁属于谁的意思
接口表达的是 谁具有什么行为
我们设计多个接口有什么好处呢?
有了多个接口后,我们就不必局限于类的"共同属性"而是关注这个类是否具有某种行为;
例如:狗,猪,鸟,都可以归为我们的动物类,并且同时具备:飞 || 跑 || 游泳;等行为,我们也可以设计一个机器人类虽然不具备"动物类"的属性,但是具备某些行为;


接口间的继承
我们已经知道 我们需要继承时会用到 extends 这个关键字;
接口之间的继承也会用到;

我们看到,当B接口继承了A接口时,Date类与接口实现关系时就需要同时重写接口A和接口B的方法;

我们可以看到 接口C同时继承了 接口A 与 接口B 而,我们在学习类的时候,已经知道Java不支持多继承;这是因为在 接口中 extends 并不是继承的意思;而是 "拓展"意为:接口C具备了 B 和 C的功能;
总结:接口间的继承相当于把多个接口合并在了一起
抽象类和接口的区别
【主要区别】
**抽象类:**类中可以包含普通字段和普通方法,这些普通字段与方法可以被子类直接使用(不用重写!!!);
**接口:**接口中不能包含普通方法,子类必须重写所有抽象方法;
**抽象类存在的意义:**抽象类的存在是为了让编译器更好的校验,Java文件中的父类我们不会直接使用,而是使用其子类,万一创建了父类的实例,编译器会及时提醒我们;

java抽象类和接口
云姜.2026-02-08 12:08
相关推荐
带刺的坐椅1 小时前
Claude Code Skills,Google A2A Skills,Solon AI Skills 有什么区别?xyq20242 小时前
Pandas 安装指南爱学英语的程序员2 小时前
面试官:你了解过哪些数据库?xixixin_2 小时前
【JavaScript 】从 || 到??:JavaScript 空值处理的最佳实践升级m0_736919102 小时前
C++中的委托构造函数lsx2024062 小时前
Python3 SMTP发送邮件教程callJJ2 小时前
Spring AI 文本聊天模型完全指南:ChatModel 与 ChatClientCBeann2 小时前
企业级规则引擎落地实战:动态脚本引擎 QLExpress ,真香!懈尘2 小时前
从 Java 1.7 到 Java 21:逐版本深入解析新特性与平台演进