JAVA基础-接口和抽象类
个人经验,抽象类工作中很少见。
不过鉴于一直对这些概念很模糊,所以学习记录一下。
一、什么是抽象类?
简单来说,不管是抽象类还是抽象方法都必须用 abstract 关键字进行声明,抽象方法只能存在于抽象类中。
在面向对象的概念中,所有的对象都是通过类来描绘的,如果一个类中没有包含足够的信息来描绘一个具体的对象,那么这样的类称为抽象类。(http://c.biancheng.net/view/1004.html)
抽象类不能实例化,也就是不能new对象。
如果子类继承(extends)一个抽象类,则子类必须实现(implements)父类的抽象方法,否则子类也是抽象类。(子类不完全和父类一致,子类可以转换成父类的类型,反之则不行)
抽象方法不能用final、static、private修饰。
抽象方法没有方法体;(方法体的定义是:在方法声明后的一对大括号以及中间的内容就称之为方法的方法体,方法体的内容包括局部变量的声明和Java语句)
抽象类的作用
抽象类的主要作用是让人注意,知道这是抽象类,然后知道方法是在子类中实现的,有个提示作用。(https://www.php.cn/java/base/463956.html)
二、什么是接口?
简单来说,接口是用interface关键字进行声明。
接口是某个事物对外提供的一些功能的说明,和类相似,但概念不一样(类描述对象的属性和方法。接口则包含类要实现的方法)
接口也不能被实例化。
类可以实现(implements)接口,实现类必须要实现接口中所有方法。
接口和接口之间可以多继承(extends);(多继承:一个子类可以有多个父类,继承多个父类的特性)
接口的作用
- 可以使项目分离,所有层都面向接口开发,提高开发效率;
- 接口使代码和代码之间的耦合度降低,变得可插拔,可以随意切换;
- 接口和抽象类都能完成某个功能时,优先选择接口,因为接口可以多实现,多继承,并且一个类除了接口之外,还可以继承其它类。
三、接口和抽象类的区别
总结下:(http://c.biancheng.net/view/6551.html)
相同点:
- 接口和抽象类都不能被实例化;
- 接口和抽象类的子类只有实现接口和抽象类中全部方法,才可以实例化。
不同点:
- 接口默认是public修饰,抽象类可以用public、protected 和 default 修饰;
- 接口中的变量只能是静态常量(public static final) ,并且必须赋值才能通过编译,抽象类中变量可以是静态常量和普通成员变量;
- 接口不能为普通方法提供方法实现,抽象类可以包含普通方法;
- 接口没有构造方法,抽象类里的构造方法是让其子类调用这些构造方法来完成属于抽象类的初始化操作;
public class Student{ private String name; private int age; public Student(){ System.out.println("这是无参构造"); } public Student(String name, int age){ System.out.println("这是有参构造"); } }
- 接口没有main方法,抽象类有并且可以执行;
- 抽象类运行速度比接口快。
看蒙了就多看几遍,任重而道远啊。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~