Java基础知识总结:接口vs抽象类、重写vs重载

版权声明:本文遵守创作共享 CC BY-NC-SA 3.0协议 https://blog.csdn.net/chen_kkw/article/details/86665698

我觉得面试就真不该问这种问题,不了解的同学建议去看看 JDK 集合类的源码,对接口和抽象类的理解会更深刻。

接口

接口是方法的集合,不同的实现类可以去实现这个接口中的方法,因此有点像抽象类里的抽象方法,但是和抽象方法不同的是,接口更加通用,规定了一整套行为(例如java.util.List),而抽象方法往往是规定了该抽象类里的某种行为。

抽象类

抽象类的作用大多是抽取多个 Java 类的通用逻辑,对于子类特有的逻辑可以放在抽象方法中,由这些子类去各自实现,本质是通过子类继承的方式达到代码复用的目的(例如 java.util.AbstractList)。

面向对象三要素

我们都知道,面向对象编程有三要素:封装、继承和多态。

封装很简单,就是设定边界,避免暴露内部状态;

继承则是一种紧密耦合的关系,有利于代码复用;

多态就是父类引用指向具体的子类实现,在编程时这种对应关系无法确定,只有在程序运行时才能知道。

重写和重载

重写(Overwrite)是指,父子类中相同名字和参数的方法,不同的实现,体现在父类与子类这种上下层关系里。

重载(Overload)则是相同名字的方法,但是不同的参数,本质上这些方法签名是不一样的,体现在某个类中,是并行的关系。

这里有个问题,方法名称和参数一致,但是返回值不同,这种情况在 Java 代码中算是有效的重载吗?面试里经常问道。答案是不行,编译直接报错。

没有更多推荐了,返回首页