Java 学习博客_10 入门——抽象类、抽象方法、接口

简介: 以黑马程序员全套Java教程网课为主。

抽象方法:没有方法体的方法

public abstract void eat();

抽象类:含有抽象方法的类。

(没有抽象方法的类也可以是抽象类,但是意义何在)

抽象类不能直接创建对象,需要子类把抽象方法重写补全后才能创建对象。否则,子类也是抽象方法。

接口

接口是一种公共的行为规范标准,只要符合规范,大家都可以使用。 java 中的接口主要是对行为的抽象。如:

public interface Jumpping{//接口
    public abstract void Jump();
}

public class Cat implements Jumpping{//实现
    //重写 Jump() 方法。如果不重写, Cat 就是一个抽象类
}

接口中的成员变量默认是 public static final 的,不能修改,而且可以通过 Class.成员变量 的方式直接访问。

接口中没有构造方法和非抽象方法。成员方法默认是 public abstract 的。

(但接口的实现类中可以有 super。这是因为所有没有父类的类都默认继承自 Object 类,如果接口的实现类使用 Object 类中的方法就会用到 super)

接口是抽象类,不能直接实例化,可以借助多态的方法实例化。

相较类与类之间不能多继承,只能层层继承:接口可以多实现implements interface1, interface2

接口和接口之间也可以多继承interface1 extends interface2, interface3

总结

在这里插入图片描述

设计原则

抽象类中的抽象方法所有对象中都必须有;接口则是选择性实现的。比如门这一大类,其中不管什么门,防盗门、木门、自动门,都有门的特有行为(开关门、锁门……)只是实现方法可能不一样,所以要在门父类中定义这些抽象方法,在子类中必须实现。

但是对于门来说不是必须有的抽象方法(如响铃)这种抽象方法就应该作为接口,选择性实现。有响铃功能的门实现这一接口,没有响铃功能的门不必实现。

例:有乒乓球运动员、乒乓球教练、篮球运动员、篮球教练。为了能出国交流,乒乓球运动员和教练需要会说英语。分析本例如何用具体类、抽象类、接口实现。

graph TB
A[人]-->B[运动员]
A-->C[教练]
B-->D[篮球运动员]
B-->E[乒乓球运动员]
H[说英语]-->E
H-->G
C-->G[乒乓球教练]
C-->F[篮球教练]

其中,人、运动员、教练是抽象类,说英语是接口。其他具体类需要实现接口,并重写继承的所有抽象方法。

抽象类 / 接口作为形参 / 返回值

类也可以作为形式参数或函数的返回值。

抽象类:如果方法的形参或函数的返回值是抽象类名,实际需要的是实现了该抽象类的子类对象。

如函数形参是Animal,实际需要通过多态的方法Animal a=new Cat();然后把a传给函数。

接口作为形参/函数返回值,和抽象类一样,实际需要的是实现了该接口的类对象。

目录
相关文章
|
23天前
|
存储 监控 Java
【Java并发】【线程池】带你从0-1入门线程池
欢迎来到我的技术博客!我是一名热爱编程的开发者,梦想是编写高端CRUD应用。2025年我正在沉淀中,博客更新速度加快,期待与你一起成长。 线程池是一种复用线程资源的机制,通过预先创建一定数量的线程并管理其生命周期,避免频繁创建/销毁线程带来的性能开销。它解决了线程创建成本高、资源耗尽风险、响应速度慢和任务执行缺乏管理等问题。
154 60
【Java并发】【线程池】带你从0-1入门线程池
|
10天前
|
缓存 安全 Java
【Java并发】【synchronized】适合初学者体质入门的synchronized
欢迎来到我的Java线程同步入门指南!我不是外包员工,梦想是写高端CRUD。2025年我正在沉淀中,博客更新速度加快,欢迎点赞、收藏、关注。 本文介绍Java中的`synchronized`关键字,适合初学者。`synchronized`用于确保多个线程访问共享资源时不会发生冲突,避免竞态条件、保证内存可见性、防止原子性破坏及协调多线程有序访问。
46 8
【Java并发】【synchronized】适合初学者体质入门的synchronized
|
10天前
|
存储 监控 Java
《从头开始学java,一天一个知识点》之:数组入门:一维数组的定义与遍历
**你是否也经历过这些崩溃瞬间?** - 看了三天教程,连`i++`和`++i`的区别都说不清 - 面试时被追问"`a==b`和`equals()`的区别",大脑突然空白 - 写出的代码总是莫名报NPE,却不知道问题出在哪个运算符 这个系列就是为你打造的Java「速效救心丸」!我们承诺:每天1分钟,地铁通勤、午休间隙即可完成学习;直击痛点,只讲高频考点和实际开发中的「坑位」;拒绝臃肿,没有冗长概念堆砌,每篇都有可运行的代码标本。明日预告:《多维数组与常见操作》。 通过实例讲解数组的核心认知、趣味场景应用、企业级开发规范及优化技巧,帮助你快速掌握Java数组的精髓。
57 23
|
2月前
|
消息中间件 Java 数据库
自研Java框架 Sunrays-Framework使用教程「博客之星」
### Sunrays-Framework:助力高效开发的Java微服务框架 **Sunrays-Framework** 是一款基于 Spring Boot 构建的高效微服务开发框架,深度融合了 Spring Cloud 生态中的核心技术组件。它旨在简化数据访问、缓存管理、消息队列、文件存储等常见开发任务,帮助开发者快速构建高质量的企业级应用。 #### 核心功能 - **MyBatis-Plus**:简化数据访问层开发,提供强大的 CRUD 操作和分页功能。 - **Redis**:实现高性能缓存和分布式锁,提升系统响应速度。 - **RabbitMQ**:可靠的消息队列支持,适用于异步
自研Java框架 Sunrays-Framework使用教程「博客之星」
|
1天前
|
设计模式 存储 安全
【Java并发】【AQS】适合初学者体质的AQS入门
AQS这是灰常重要的哈,很多JUC下的框架的核心,那都是我们的AQS,所以这里,我们直接开始先研究AQS。 那说到研究AQS,那我们应该,使用开始说起🤓 入门 什么是AQS? AQS(Abst
20 8
|
2月前
|
Java 调度 开发者
Java线程池ExecutorService学习和使用
通过学习和使用Java中的 `ExecutorService`,可以显著提升并发编程的效率和代码的可维护性。合理配置线程池参数,结合实际应用场景,可以实现高效、可靠的并发处理。希望本文提供的示例和思路能够帮助开发者深入理解并应用 `ExecutorService`,实现更高效的并发程序。
43 10
|
2月前
|
Java 数据库连接 数据库
【潜意识Java】深度分析黑马项目《苍穹外卖》在Java学习中的重要性
《苍穹外卖》项目对Java学习至关重要。它涵盖了用户管理、商品查询、订单处理等模块,涉及Spring Boot、MyBatis、Redis等技术栈。
187 4
|
2月前
|
前端开发 Java 数据库连接
【潜意识Java】深度解读JavaWeb开发在Java学习中的重要性
深度解读JavaWeb开发在Java学习中的重要性
45 4
|
4月前
|
Java
Java基础(13)抽象类、接口
本文介绍了Java面向对象编程中的抽象类和接口两个核心概念。抽象类不能被实例化,通常用于定义子类的通用方法和属性;接口则是完全抽象的类,允许声明一组方法但不实现它们。文章通过代码示例详细解析了抽象类和接口的定义及实现,并讨论了它们的区别和使用场景。
|
6月前
|
Java
Java——抽象类和接口
抽象类是一种不能被实例化的类,至少包含一个抽象方法(无实现体的方法),常用于定义一组相关类的共同特征,并强制子类实现特定方法。抽象方法不能被 `static` 或 `final` 修饰,且必须被重写。 接口则是一个完全抽象的类,用于规范类的行为。接口使用 `interface` 关键字定义,不能实例化,并且类与接口之间是实现关系。 内部类是在一个类内定义的类,分为成员内部类、静态内部类、局部内部类和匿名内部类。成员内部类可被修饰符修饰,静态内部类只能访问外部类的静态成员,局部内部类定义在方法内,匿名内部类则隐藏了名字,直接通过 `new` 关键字定义并实现接口或继承类。
45 5
Java——抽象类和接口