Java 编程:抽象类与接口的使用指南
摘要助手
切换
SummaryGPT
AI初始化中...
介绍自己 🙈
生成本文简介 👋
推荐相关文章 📖
前往主页 🏠
前往订阅 💥
前往评论 💬
👀 部署教程
Java 编程:抽象类与接口的使用指南
dong4j抽象类
把多个类中相同的方法声明给抽取出来。定义到一个类中。
- 一个方法如果只有方法声明,没有方法体,那么该方法必须定义为抽象方法。
- 而一个类中如果有抽象方法,那么,该类必须定义为抽象类。
抽象类的特点:
- 抽象方法和抽象类都必须用 abstract 表示。
- 一个类继承抽象类的时候;
- 要么:本身是一个抽象类。
- 要么:实现抽象类中的所有抽象方法。
- 抽象类有构造方法, 但是不能实例化, 可以按照多态的使用方式使用。
- 成员特点:
- 成员变量
- 可以是变量,也可以是常量。
- 成员变量
- 构造方法
- 有 用于子类访问父类构造方法,初始化父类数据
- 成员方法
- 可以是抽象,也可以非抽象。
- 抽象类的好处:
- 抽象类中的非抽象方法提高了代码的复用性。
- 抽象类中的抽象方法强制要求子类必须重写某些方法。
- 抽象类中的几个小问题:
- 抽象类不能实例化,构造方法有什么用呢?
- 用于子类访问父类数据的初始化。
- 如果一个类中没有抽象方法,而类却被定义为了抽象类,请问为什么?
- 不让创建对象。
- abstract 不能和哪些关键字共存:
- private: 冲突
- final: 冲突
- static: 无意义
- 抽象类不能实例化,构造方法有什么用呢?
接口 (掌握)
如果一个抽象类中的所有成员方法都是抽象的,java 就提高了一种更抽象的表达方式:接口。
接口的特点:
接口用 interface 定义。
类实现接口用 implements 关键字。一个类要实现接口:
- 本身是抽象类。
- 实现接口中的所有抽象方法。
接口不能实例化。可以按照多态的使用方式使用。
成员特点:
- 成员变量:只能是常量。
- 默认修饰符:public static final
- 成员方法:只能是抽象方法。
- 默认修饰符:public abstract
- 成员变量:只能是常量。
使用接口的原则
- 使用接口解决多继承
- 使用接口为外部类添加功能
- 以面向对象的角度考虑, 将一个类与生俱来的特征和行为和依赖于外部的可选的特征和行为分离, 让类尽可能的单纯, 即解耦
接口的优点
- 将设计和实现分离, 对外 (调用者) 隐藏了实现 (而通常调用者也不需要关心实现)
- 面向接口编程是 OOP 的核心
类与接口的关系:
- 类与类的关系
- 继承: 单继承。
- 类与接口的关系
- 实现: 单实现,多实现。
- 继承一个类的同时实现多个接口。
- 接口与接口的关系
- 继承: 单继承,多继承。
抽象类和接口的区别:
- 成员区别
- 抽象类:
- 成员变量
- 可以是变量,也可以是常量。
- 构造方法
- 有
- 成员方法
- 可以是抽象,也可以非抽象。
- 成员变量
- 接口:
- 成员变量:只能是常量。
- 默认修饰符:public static final
- 成员方法:只能是抽象方法。
- 默认修饰符:public abstract
- 成员变量:只能是常量。
- 抽象类:
- 关系区别
- 类与类的关系
- 继承,单继承。
- 类与接口的关系
- 实现,单实现,多实现。
- 继承一个类的同时实现多个接口。
- 接口与接口的关系
- 继承,单继承,多继承。
- 类与类的关系
- 设计理念不同
- 抽象类被继承体现的是:is a 的关系。抽象类中定义的是继承体系共性功能。
- 接口被实现体现的是:like a 的关系。接口中定义的是继承体系的扩展功能。
什么时候把抽象方法写到抽象类中–> 与生俱来的行为
什么时候把抽象方法写到接口中 –> 附属添加的第三方的行为
总结
- 抽象类在 java 语言中所表示的是一种继承关系,一个子类只能存在一个父类,但是可以存在多个接口。
- 在抽象类中可以拥有自己的成员变量和非抽象类方法,但是接口中只能存在静态的不可变的成员数据(不过一般都不在接口中定义成员数据),而且它的所有方法都是抽象的。
- 抽象类和接口所反映的设计理念是不同的,抽象类所代表的是 “is-a” 的关系,而接口所代表的是 “like-a” 的关系。
抽象类和接口是 java 语言中两种不同的抽象概念,他们的存在对多态提供了非常好的支持,虽然他们之间存在很大的相似性。但是对于他们的选择往往反应了您对问题域的理解。只有对问题域的本质有良好的理解,才能做出正确、合理的设计。
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果