- 加入电网后我才明白为什么很多人笔试通过后面试却失(2-8)
- 在国家电网的招聘进程当中,始终流传着一种说法,那就是“笔试容易通过,而面试难以留下”。每一年都存在
当作Java面向对象编程里头的核心设计思想,抽象类跟接口的考察频率,,在中高级面试里高达78%(这数据源自某招聘平台2024年的技术面试相关内容)。面试官并非只是单独考察语法记忆,核心在于判断三点:
对Java设计原则里开闭原则、单一职责的理解所达到的深度,在实际项目当中抽象设计的能够落地的能力,面对复杂问题时的逻辑拆解的能力。
好多程序员答题之时,仅仅是罗列差异之处,然而却将“联系”以及“设计思想”给忽视掉了,最终致使得分较为低,优秀的回答需要兼顾语法、原理、应用这三层逻辑。
抽象类与接口的本质区别
1. 核心定义与设计初衷
被称作抽象类的(abstract class),其本质呢,是那种 “不完全的类”,它里面包含着所谓抽象方法(也就是没有实现的那种),还有具体方法(是有实现的那种),它存在的目的在于,给子类去提供一个统一的模板,并且着重强调 “is-a” 这样的继承关系(就好比 “Dog is a Animal” 这种情况)。
接口,也就是interface,其本质,是一种“行为规范”,它仅仅去定义方法签名,在Java 8之后,还能够包含默认方法以及静态方法,它存在的目的,是要为不同的类提供统一的行为标准,它着重强调的是“has - a”这种实现关系,就好比说“Bird has a Flyable”。
2. 底层原理差异(JVM 视角)
对比维度
抽象类
接口
字节码标识
ACC_ABSTRACT + ACC_SUPER
ACC_INTERFACE + ACC_ABSTRACT
继承限制
单继承(子类只能 extends 一个)
多实现(类可 implements 多个)
成员变量
可定义普通变量、常量
只能定义常量(public static final)
方法类型
抽象方法、普通方法、静态方法等
Java 8+:抽象方法、默认方法、静态方法
构造器
有构造器(供子类调用)
无构造器
访问修饰符

可设 private/protected/public
成员默认 public(不可修改)
3. 设计思想差异
不能被实例化的抽象类,它能够体现出 “继承复用” 这种特性,子类必须继承抽象类当中的属性以及方法来使用,这种方式适合于统一子类所含有的核心行为,就好比 AbstractList 能够统一列表所具备的核心操作一样。
接口,它所展现的是“多态解耦”这种特性,它不会强行让子类去继承属性,仅仅是对行为作出规范,它适用于那种跨类的功能标准化情况,就好像Runnable接口对线程执行行为进行规范那样。
面试满分答题模板(分 3 步)第一步:先总述核心联系
核心联系体现于,抽象类和接口都出于抽象设计来运用,它们俱都无法直接去实例化,二者均可含有抽象方法,子类或者是实现类必须要重写抽象方法才可加以使用,其本质全都是为了让代码耦合度降低,进而提升扩展性。
第二步,将核心区别进行分点拆解,采用“语法 + 原理 + 应用”这样的三层逻辑。
继承关系方面,抽象类有着按照Java单继承机制限制的单继承情况,实现关系来讲,接口存在作为解决单继承局限手段的多实现情形。
比如说,存在这样一个类,可同时去实现 Runnable 接口以及 Serializable 接口,不过呢,它仅仅能够继承一个抽象类,这是被 Java 的类型体系设计所决定的。
成员特性是,抽象类能够包含普通变量以及多种方法,而接口仅仅只能包含常量和特定方法,在Java 8之后默认方法是用于兼容扩展的。
接口的常量,其默认状态为 public static final,要是无需进行显式声明,那这属于 JVM 层面的强制规范,如此这般能够避免在多实现的情景下出现变量冲突的状况。
设计的最初想法是,抽象类所着重的是“模板复用”,而接口所着重的是“行为规范”。
面试加分句:“比如 Spring 的
AbstractApplicationContext属于抽象类,它能提供IOC容器的核心模板,而ApplicationContext接口会规范容器的核心行为,展现出‘模板 + 规范’这样的设计思路。
第三步:结合实际场景说明选择逻辑
实际实施开发期间,要是遇到需要再次使用属性以及核心方法的情况,那么优先选用抽象类,假设碰到需要在不同类之间达成统一行为的状况,比如说多个彼此毫无关联的类都需要去实现同一个功能,这种时候优先选用接口,举例如下:
把叫做‘动物’的抽象类进行定义。在这个类里面,有个叫做 name 的属性,还有个 eat () 的抽象方法,以及 sleep () 的属于现在所要说的具体方法。然后呢,猫、狗子类从这动物类继承下来,不过它们继承之后,仅仅只需要去实现 eat () 这个操作就可以了。
明确界定‘飞翔’这样的接口,其中涵盖 fly () 这种方法,鸟类以及飞机类能够各自去实现它,并不需要继承关系或者关联关系。
面试要避开坑,有三大要点,其一,避免只去罗列语法区别,而是必须结合设计思想,这是面试官最为关注的;其二,要记住 Java 8 加上接口的新特性,也就是默认方法、静态方法,很多新手会忽略,进而导致答题不全面;其三,要用具体项目案例来支撑,比如 Spring、JDK 源码中的应用,这比单纯讲理论更具说服力。
抽象类跟接口二者之间的区别关联,其要点在于“模板对规范”这种设计逻辑上的差别。在面试进行回答之际,按照“联系,区别(语法加上原理再加上应用),场景选择”这样的逻辑来展开阐述,接着补充一两个源程序代码案例,如此便能轻易地获取到满分。建议把本文收藏起来,在面试前的三分钟迅速进行回顾,以此防止在临场的时候出现卡顿现象!
温馨提示:本内容地址http://m.ysjob.cc/article/articledetail-389497.html转载请注明,以上Java程序员面试必看:抽象类与接口核心考点及答题要点资讯信息来自颍上人才网(颍上地区最大的颍上人才网,颍上人才网)